[Front-end๐Ÿฆ] #6-2 CSS ์ •๋ฆฌ 2

๋˜์ƒยท2021๋…„ 11์›” 5์ผ
1

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
14/58

CSS ์ •๋ฆฌ 1 ์— ๋‹ค ๋„ฃ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, CSS๋Š” HTML๋ณด๋‹ค ์–‘์ด ๋งŽ์•„์„œ ๊ธ€์„ ๋‚˜๋ˆ„๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

1. layout

1-1. Float

1. float ๊ฐœ๋…

/* ๋‘ฅ๋‘ฅ ๋„์›Œ์„œ ์™ผ์ชฝ์œผ๋กœ ์ •๋ ฌ */
img {
    float: left;
}

๋‘ฅ๋‘ฅ ๋„์šฐ๋Š” ๊ฒƒ. ์‚ฌ์ง„ ์˜†์— ์ค„๊ธ€์ด ๋“ค์–ด๊ฐ€๋Š” ๊ธฐ์‚ฌ ํ˜•์‹์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ธ€์ž๋“ค์€ float ๋œ ๊ฒƒ์„ ์ธ์‹ํ•จ!!!


2. float ํŠน์„ฑ (๋ฌธ์ œ์ )

๋‹ค๋ฅธ ํƒœ๊ทธ๋“ค์ด block์œผ๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ•จ.

inline ์š”์†Œ์ฒ˜๋Ÿผ ๋„“์ด๋‚˜ ๋†’์ด๋ฅผ ์ฃผ์ง€ ์•Š์œผ๋ฉด content ์˜์—ญ์˜ ๋„“์ด๋งŒ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋œ๋‹ค.


3. float ํŠน์„ฑ ํ•ด๊ฒฐ

border๋ฅผ ์”Œ์šฐ์ง€ ๋ชปํ•œ๋‹ค๊ฑฐ๋‚˜, ๋‹ค์Œ ์š”์†Œ์™€ ๊ฒน์น˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  1. ๋ถ€๋ชจ ์š”์†Œ์— overflow ์ถ”๊ฐ€ : ๋ถ€๋ชจ๊ฐ€ overflow ๋œ ์ž์‹์„ ์ธ์‹ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ž์‹์ด ๋ชจ๋‘ float๋ผ์„œ ๋ถ€๋ชจ๊ฐ€ ๋†’์ด๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•  ๋•Œ ์‚ฌ์šฉ.
๋ถ€๋ชจ {
    overflow: hidden;
    display: inline-block; /* ์ด๊ฑธ๋กœ๋„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ. */
}
  1. ๋ถ€๋ชจ ์š”์†Œ ๋†’์ด ์ง์ ‘ ์ง€์ •
  2. ํ˜•์ œ์— clear: both; ์‚ฌ์šฉ : ์•ž์— float ํ˜•์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ
  3. clear-fix
/* clear-fix : ๋ถ€๋ชจ ์š”์†Œ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์ƒ์˜ block ํ˜•ํƒœ ๋งˆ์ง€๋ง‰ ์ž์‹์„ ํ•˜๋‚˜ ์คŒ. */
๋ถ€๋ชจ::after {
    contet: '';
    display: block;
    clear:both;
}



1-2. Flex

1-2-1. flex-direction

์ปจํ…์ธ  ์ •๋ ฌ, ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๋Š” ์†์„ฑ.

/* ์ ์šฉํ•˜๋ฉด ๊ฐ€๋กœ๋กœ ๋ฐฐ์—ด๋˜๊ณ  ์„ธ๋กœ๋กœ ๋„“์ด ์ „์ฒด๋ฅผ ์žก๋Š” block ํ˜•ํƒœ๋กœ */
.container {
    /* container๊ฐ€ block ํ˜•ํƒœ, inline ํ˜•ํƒœ */
    display: flex, inline-flex;
    /* ๋ฐฐ์—ด ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ : ์ˆ˜ํ‰ ์ˆ˜์ง ์ˆ˜ํ‰๋ฐ˜๋Œ€(์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ 1 2 3 ๋ถ™์Œ...) ์ˆ˜์ง๋ฐ˜๋Œ€(์•„๋ž˜๋ถ€ํ„ฐ) */
    flex-direction: row, column, row-reverse, column-reverse; 
}

๊ธฐ๋ณธ์ ์œผ๋กœ display: flex ์ฃผ๋ฉด flex-item ๋†’์ด์— container ๋†’์ด๊ฐ€ ๋งž์ถฐ์ง. container ๋†’์ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š”, item์ด stretch ๋˜์–ด ๋†’์ด๊ฐ€ ๋งž์ถฐ์ง

1-2-2. Axis

flex๋Š” ํ•˜๋‚˜์˜ ์ถ•(main-Axis)์„ ๊ฐ€์ง€๊ณ  flex-start, center, flex-end ์ˆœ์œผ๋กœ ์•„์ดํ…œ์ด ์ •๋ ฌ๋œ๋‹ค. (default : ์™ผ์ชฝ ์ค‘๊ฐ„ ์˜ค๋ฅธ์ชฝ)

1-2-3. justify-content

flex์— ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ์ •๋ ฌ ๊ด€๋ จ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

.container {
   display: flex;
    /* ๋ฐฐ์—ด ์œ„์น˜ ๋ณ€๊ฒฝ */
    justify-content: flex-start; /* flex- start ์œ„์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ */
    justify-content: center; /* center์— center๊ฐ€ ์˜ค๊ฒŒ */
    justify-content: flex-end; /* flex-end ์œ„์น˜์—์„œ ๋๋‚˜๊ฒŒ */
    /* ์ •๋ ฌ ์œ„์น˜ ๋ณ€๊ฒฝ */
    justify-content: space-between; /* ์–‘์ชฝ ๋์— ๋งž๊ฒŒ ๊ฐ„๊ฒฉ ์ƒ๊น€ */
    justify-content: space-around;  /* ์•„์ดํ…œ ๊ฐœ์ˆ˜๋กœ container ๋‚˜๋ˆด์„ ๋•Œ ๊ฐ ์˜์—ญ๊ณผ item ์‚ฌ์ด์˜ ์ขŒ์šฐ ๊ฐ„๊ฒฉ ๊ฐ™์Œ. */
    justify-content: space-evenly;  /* ๊ฐ ์•„์ดํ…œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์ด ๊ฐ™์•„์ง */
}

1-2-4. cross-Axis, align-items, align-content

๋ณด์กฐ(๊ต์ฐจ) ์ถ•. axis๊ฐ€ row๋ฉด colum, axis๊ฐ€ colum์ด๋ฉด row

.container {
    display: flex;
    /* ๋ณด์กฐ์ถ• ๊ธฐ์ค€ ์ •๋ ฌ : (cross-Axis ๋ฐฉํ–ฅ) ์ญ‰ ๋Š˜์–ด๋‚จ, ์ค‘๊ฐ„, ์‹œ์ž‘, ๋, ๋ฌธ์ž ๋ฐ‘์˜ ๋ผ์ธ */
    align-items: stretch(default), center, flex-start, flex-end, baseline;
    /* cross-Axis ์˜ item์ด ์—ฌ๋Ÿฌ์ค„์ผ๋•Œ ์‚ฌ์šฉ. */
    align-content: center, flex-start, flex-end; 

stretch๋Š” element ์˜ ๋†’์ด๋ฅผ ์‚ด๋ฆฌ์ง€ ์•Š๋Š”๋‹ค!! Flex ์™„๋ฒฝ ์ •๋ฆฌ

1-2-5. flex-wrap

flex๋Š” ์ž์‹์ด ์ž๊ธฐ๋ณด๋‹ค ํฌ๋‹ค๊ณ  ์ž์‹ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜์ง€ ์•Š๋Š”๋‹ค. flex-wrap์œผ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ์ž์‹ ์˜ ๋„“์ด๋งŒํผ ์ ์šฉ๋˜์–ด์„œ ๋‚ด๋ ค๊ฐ.

.container {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    /* ์ž์‹์„ ๊ฐ์‹ธ์ฃผ๋Š” ๊ธฐ๋Šฅ : width๊ฐ€ ์ค„๋ฉด ๋‚ด๋ ค๊ฐ, nowrap(default), ์œ„๋กœ ์˜ฌ๋ฆผ.*/
    flex-wrap: wrap, nowrap, wrap-reverse;
}

1-2-6. flex-basis, flex-grow, flex-shrink, ...

flex-basis : flex-item ํฌ๊ธฐ ๊ฒฐ์ •. ์ถ•์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. flex-basis๊ฐ€ ์ ์šฉ๋˜๋ฉด width, height๋Š” ๋ฌด์‹œ
flex-grow : flex-basis ์—์„œ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋„ ๋˜๋Š”์ง€ ์ง€์ •. ํ•˜๋‚˜๋ผ๋„ ์ฃผ๊ฒŒ๋˜๋ฉด ํ™”๋ฉด ์ „์ฒด width์— ๋งž์ถฐ์„œ ๋Š˜์–ด๋‚จ.
flex-shrink : flex-basis ์—์„œ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค์–ด๋„ ๋˜๋Š”์ง€ ์ง€์ •.

.child {
    flex-basis: auto(default) 100px;
    flex-grow: 1, 2, 3; /* flex-grow 1์„ ์ค€ ๋‹ค๋ฅธ child์™€ ๊ฐ™์€ ํฌ๊ธฐ, 2๋ฐฐ, 3๋ฐฐ */
    flex-shrink: 1, 2, 0; /* default(์ค„์–ด๋“ ๋‹ค) 2๋ฐฐ ๋นจ๋ฆฌ์ค„์–ด๋“ฌ ๊ณ ์ • */
    flex: 1; /* grow 1 shrink 1 basis 0(์ž๋™์œผ๋กœ ๋งž์ถฐ์ง) */
    flex: 1 1 300px; 
}

๊ทธ์น˜๋งŒ, content๊ฐ€ ๋“ค์–ด์žˆ์œผ๋ฉด grow, shrink ๋„“์ด๊ฐ€ ์ •ํ™•ํžˆ ๋งž์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

flex ์žก์„ ๋•Œ width, flex-basis, flex-grow ... ๋“ฑ ๋‹จ์œ„๋ฅผ ์ค„ ๋•Œ๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜๋กœ ํ†ต์ผํ•˜์ž!!! ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ์ฃผ๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‹ฌ๋ผ์„œ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ถ•์•ฝํ˜•๋„ ํ—ท๊ฐˆ๋ฆฌ๋‹ˆ๊นŒ ์ž์ œํ•˜์ž.

flex-item { algin-self: flex-start }; /* ์–˜๋งŒ flex-start๋กœ ๊ฐ */
flex-flow: column wrap; /* flex-direction, flex-wrap ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ์Œ */
  • align-self : ๋ถ€๋ชจ์˜ align-items๋ฅผ ๋ฎ์Œ. ๊ฐœ๋ณ„์ ์ธ align-items ์†์„ฑ ๋ถ€์—ฌ. (default - stretch)
  • order : flex-item ๋“ค์˜ ์ˆœ์„œ. ์ˆ˜๊ฐ€ ์ž‘์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„ ๋†’์•„์„œ ๋จผ์ € ๋ฐฐ์—ด๋จ. default 0

flex flog game




1-3. Grid

๋ฌดํ•œ ์Šคํฌ๋กค ๋˜๋Š” ๊ฒƒ์€ grid๋กœ ๊ทธ๋ฆฌ์ง€ ๋ง์ž. grid๊ฐ€ ์—†์„๋•Œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ๋„ ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

1-3-1. template

๊ธฐ๋ณธ์ ์œผ๋กœ, container์˜ ๋„ˆ๋น„๋ฅผ ๊ฝ‰ ์ฑ„์šฐ๋Š” block ์Œ“์ด๋“ฏ ์Œ“์ธ๋‹ค. 3*3 ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ์œผ๋ฉด template ์ด์šฉํ•ด์„œ row, column ์ค˜์•ผํ•จ.

.container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: repeat(3, 1fr);
    /* ํ–‰ 3๊ฐœ ์—ด 3๊ฐœ, width 1fr(๋น„์œจ) (๊ฐ๊ฐ ๋„“์ด ๋™์ผํ•ด์ง.) */
    gap: 10px 20px; /* gap row, col */
    grid-area: 1/2/4/6; /* grid row start col start row end col end */
}

grid-area ๋ฅผ ์ด์šฉํ•ด์„œ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

.container {
    display: grid;
    gap: 10px;
    grid-template-areas: 'header  header  header'
                         'section section aside'
                         'footer  footer  footer'
}
.header {
    border: 10px solid tomato;
    grid-area: header;
}
.section {
    border: 10px solid darkcyan;
    grid-area: section;
}
.aside {
    border: 10px solid gold;
    grid-area: aside;
}
.footer {
    border: 10px solid pink;
    grid-area: footer;
}

1-3-2. ์…€ ์˜์—ญ ์ง€์ •

.item {
   /* ์—ด 2์นธ ํ•ฉ์น˜๋Š” ์ฝ”๋“œ 3๊ฐ€์ง€ */
   grid-column-start: 1;
   grid-column-end: 3;
   grid-column: 1 / 3; /* grid-line 1๋ถ€ํ„ฐ 3๊นŒ์ง€ */
   grid-column: 1 / span 2; /* grid-line 1๋ถ€ํ„ฐ 2์นธ */
}

Grid Garden




2. Move

vendor prefix๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

2-1. Hover, Active, Focus

hover : ๋งˆ์šฐ์Šค ์˜ฌ๋ฆผ
active : ํ™œ์„ฑํ™” (ex. ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š”.)
focus : tap ๋ˆŒ๋Ÿฌ์„œ ์ด๋™ํ• ๋•Œ ์„ ํƒ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„


2-2. transition, transform

2-2-1. transition

CSS ์†์„ฑ ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ, ๋ณ€ํ™”๊ฐ€ ์ผ์ • ์‹œ๊ฐ„์— ๊ฑธ์ณ์„œ ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ.

/* ๋นจ๊ฐ„์ƒ‰์ด ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ transition */
div {
    background-color: red;
    transition-duration: 3s; /* 3์ดˆ๋™์•ˆ ๋ฐ”๋€œ */
    transition-timing-function: ease, linear, ease-in, ease-out, ease-in-out, steps(int, start|end), cubic-beizer, initial, inherit
    transition-delay: 2s;
    transition: background-color 3s ease 2s; /* ์œ„์˜ ์ˆœ์„œ๋Œ€๋กœ ํ•ฉ์ณ ์“ธ ์ˆ˜ ์žˆ๋‹ค */
}
div:hover { /* hover, active, ... ๋งŽ์€ ๊ฒƒ์— ์ ์šฉ ๊ฐ€๋Šฅ */
    background-color: blue;
}

tag ์˜ ์†์„ฑ(์ƒ‰์ƒ, ๋†’์ด, ...)์ด ๋ณ€ํ•  ๋•Œ ๋ณ€ํ™”ํ•˜๋Š” ๋‹จ๊ณ„์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

transition: property duration timing-func delay
property - all, none, property, initial, inherit , ...

initial์€ ์ดˆ๊ธฐํ™”.


2-2-2. transform

object๋ฅผ ๋ณ€ํ˜•ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ.

transform: translate(x, y); /* ์ด๋™ */
scale(x, y) /* ํฌ๊ธฐ */
skew(x,y)   /* ๊ธฐ์šธ๊ธฐ */
rotate(180deg) /* ํšŒ์ „ */
translateX(x), scaleY(y) /* x์ถ• y์ถ• ๋”ฐ๋กœ๋„ ๊ฐ€๋Šฅ */
transform-origin: top right; /* ํšŒ์ „ ์ถ• ์ด๋™. */
transform-origin: 50% 100px; 

2-2-3. translate vs position

Q. ๋‘˜ ๋‹ค ๋ฌผ์ฒด๋ฅผ ์–ด๋–ค ์ขŒํ‘œ๋กœ ์›€์ง์ด๋Š” ์†์„ฑ์ธ๋ฐ, ์–ธ์ œ ์–ด๋–ค๊ฑธ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
A. ์ •์ ์ธ ์‚ฌ์ดํŠธ์—์„œ ๋‹จ์ˆœ ๋ฐฐ์น˜ ์‹œ์—” position, ๋™์ ์œผ๋กœ ์ด๋™ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” translate.

Why?

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ์ฝ๋Š” ๊ณผ์ •
\
1. ํŒŒ์‹ฑ : html -> DOM tree
2. ์Šคํƒ€์ผ ๊ณ„์‚ฐ : CSS -> CSSOM
3. ๋ ˆ์ด์•„์›ƒ : CSSOM ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ DOM์„ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ํ™”๋ฉด์— ๋ณด์ด๋Š” ์ •๋ณด๋งŒ ๋‚จ๊ฒจ์„œ layout tree(render tree) ์ƒ์„ฑ
4. ํŽ˜์ธํŠธ : ๋ ˆ์ด์•„์›ƒ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ๊ฐ์  ๋ถ€๋ถ„์„ ๊ทธ๋ฆฌ๋Š” ํŽ˜์ธํŠธ ๊ธฐ๋ก ์ƒ์„ฑ
5. ์ปดํฌ์ง€ํŒ… : ๊ฐ ๋ ˆ์ด์–ด๋ฅผ ํ”ฝ์…€๋กœ ํ‘œํ˜„ํ•˜์—ฌ ํ™”๋ฉด์— ๊ทธ๋ฆผ
\
+1) reflow : ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์‹œ ์˜ํ–ฅ ๋ฐ›๋Š” ๋…ธ๋“œ๋“ค์˜ ์ˆ˜์น˜๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์„œ ๋ Œ๋” ํŠธ๋ฆฌ ์žฌ์ƒ์„ฑ
+2) repaint : reflow ๋๋‚˜๊ณ  ๋ Œ๋” ํŠธ๋ฆฌ ๋‹ค์‹œ ๊ทธ๋ฆผ. ์ˆ˜์น˜์™€ ์ƒ๊ด€ ์—†์ด ์Šคํƒ€์ผ๋งŒ ๋ณ€๊ฒฝ๋˜๋ฉด reflow ์—†์ด repaint๋งŒ ์ˆ˜ํ–‰

๋งŒ์•ฝ css๋ฅผ ํ†ตํ•ด ๋ ˆ์ด์•„์›ƒ์ด ๋ฐ”๋€Œ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค reflow, repaint ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์„œ, ๋ธŒ๋ผ์šฐ์ €์— ์ƒ๋‹นํ•œ ๋ถ€๋‹ด์ด ๊ฑธ๋ฆผ. transform ์˜ ๊ฒฝ์šฐ ๊ทธ ๋ถ€๋‹ด์„ GPUํ•œํ…Œ ์ค„ ์ˆ˜ ์žˆ๋‹ค.


2-3. Animation

transition๊ณผ animation์˜ ์ฐจ์ด : animation์€ css ์†์„ฑ๊ฐ’์˜ ๋ณ€ํ™” ์—†์ด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— JavaScript๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

2-3-1. keyframe

tag { 
    animation-name: name;
    animation-duration: 2s;
    animation-iteration-count: 3, infinite;
    animation-delay: 3s;
    animation-direction: normal, reverse, alternate(์ˆœ๋ฐฉํ–ฅ->์—ญ๋ฐฉํ–ฅ), alternate-reverse;
    animation-timing-function: ease, linear, ease-in, ease-out, ease-in-out;
    animation-play-state: running, posed;
}
@keyframes animation-name {
    /* 0%~100%๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ Step์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. */
    from { animation ์‹œ์ž‘ ์†์„ฑ }
    to { animation ๋ ์†์„ฑ }
}
animation-fill-mode: forwards;  /* ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚˜๋ฉด ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ๋ฉˆ์ถ”๋Š” ํšจ๊ณผ */
  • alternate ํšŸ์ˆ˜๊ฐ€ 1ํšŒ์ด๋ฉด ๊ทธ๋ƒฅ ์ˆœ๋ฐฉํ–ฅ ํ•œ๋ฒˆ๋งŒ ์žฌ์ƒ๋˜๊ณ  ๋๋‚œ๋‹ค.
  • ๊ฒฝ๊ณ ์ฐฝ์ด ํ”๋“ค๋ฆฌ๋Š” ํšจ๊ณผ๋„ keyframes ๋กœ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

2-3-2. SVG

์ด๋ฏธ์ง€ ํŒŒ์ผ์€ ๊นจ์ง€์ง€ ์•Š๋Š” SVG๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ์š”์ฆ˜์€ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ์“ฐ์ด์ง„ ์•Š๋Š”๋‹ค. svg path, g tag์˜ ์ƒ‰์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด, color ๊ฐ€ ์•„๋‹ˆ๋ผ fill ์„ ์ด์šฉํ•˜์ž.

  1. img tag
  2. background-image
  3. svg code

2-3-3. ์†๋„, ์ตœ์ ํ™”

transform ์„ ์ด์šฉํ•ด์„œ transition, animation์„ ์ค„ ๋•Œ, ์ค„ ์š”์†Œ์˜ ๋ฐ”๊ฟ€ ์†์„ฑ์˜ css ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ฃผ๋ฉด ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค ๊ด€๋ จ ๊ธ€, ์„ฑ๋Šฅ ์ตœ์ ํ™”




2-4. perspective

์›๊ทผ๋ฒ•. ๋‚˜์™€์˜ ๊ฑฐ๋ฆฌ๋ผ์„œ ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ์ปค๋ณด์ž„!!

div {
    perspective: 800px;
}

๋ถ€๋ชจ๊ฐ€ ์ž์‹์„ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์†Œ์‹ค์ ์ด ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ๋์— ์žˆ๋‹ค.
perspective-origin: 50% 50% ๊ฐ€ default

+. ์นด๋“œ ๋งŒ๋“ค๊ธฐ

๋Œ์•„๊ฐˆ๋•Œ ์ง„์งœ ์นด๋“œ์ฒ˜๋Ÿผ ์–‘๋ฉด์ธ ์†์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋’ท๋ฉด์„ ๋งŒ๋“ค์–ด์•ผํ•จ.

/* ํ•ต์‹ฌ ๋ถ€๋ถ„ */
.front { transform: rotateY(0deg); }
.back { transform: rotateY(-180deg); }  /* ๋’ท๋ฉด์€ ๋ฐ˜๋Œ€์ชฝ์œผ๋กœ ๋’ค์ง‘์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ!!! */
/* ์˜ฌ๋ ธ์„ ๋•Œ ๋Œ์•„๊ฐˆ ๋ฐ”ํ€ด ์ˆ˜ ๋งŒํผ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค. */
.card:hover .front { transform: rotateY(180deg); } 
.card:hover .back { transform: rotateY(0deg); }
.card {
    width: 500px;
    height: 500px;
    perspective: 400px;
    /* ํ•ด๋‹น ํšจ๊ณผ๋ฅผ transition์ด ์•„๋‹ˆ๋ผ animation์œผ๋กœ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ถ™์ด์ž. */
    transform-style: preserve-3d; 
} 
.item {
    width: 500px;
    height: 500px;
    backface-visibility: hidden;
    /* transition์„ item์— ์ค˜์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค. */
    transition: all 1.2s; 
}
<div class="card">
    <div class="item front">์•ž๋ฉด</div>
    <div class="item back">๋’ท๋ฉด</div>
</div>



2-5. media query (๋ฐ˜์‘ํ˜• ์›น)

๋ฐ˜์‘ํ˜• ์›น: ๊ธฐ๊ธฐ๋ณ„๋กœ css ๋‹ค๋ฅด๊ฒŒ ๋ฌถ์–ด์„œ ํ™”๋ฉด ๋Œ€์‘. ๋ณดํ†ต ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์ด ์••๋„์ ์œผ๋กœ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋ฐ”์ผ ๋จผ์ € ๋งŒ๋“ค๊ณ  ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. m. ์ด๋‚˜ mobile. ์ฒ˜๋Ÿผ url์„ ๋”ฐ๋กœ ๋นผ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

<link media="all">
@media all { }
all(์ „๋ถ€), aural(์Œ์„ฑ), braile(์ ์ž), handheld(์ž‘์€ ์Šคํฌ๋ฆฐ), print(์ธ์‡„), projection(ํ”„๋กœ์ ํ„ฐ), screen(์ปดํ“จํ„ฐ ์Šคํฌ๋ฆฐ), tv(์Œ์„ฑ, ์˜์ƒ ๋™์‹œ ์ถœ๋ ฅ ์žฅ์น˜), embossed(์ธ์‡„๋œ ์ ์ž ํ‘œ์‹œ ์žฅ์น˜)

and not only ,(or๊ณผ ๊ฐ™์Œ) ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๊ฐ€๋Šฅ

/* ์ด๋Ÿฐ์‹์œผ๋กœ width์— ๋”ฐ๋ฅธ ์ปดํ“จํ„ฐ, ํƒœ๋ธ”๋ฆฟ, ํฐ ํ™”๋ฉด์„ ์ œ์–ด. */
@media all and (min-width: 960px)
@media all and (max-width: 959px) and (min-wdth: 760px)
@media all and (max-wdth: 759px)

๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. css 1px์— ๋“ค์–ด๊ฐ€๋Š” ๋””๋ฐ”์ด์Šค ์Šคํฌ๋ฆฐ ํ”ฝ์…€ ์ˆ˜์˜ ๋น„์œจ
ํ•ด์ƒ๋„์— ๋”ฐ๋ฅธ ์ด๋ฏธ์ง€ ๋ณ€ํ™”๋ฅผ ์ค„ ๋•Œ ์‚ฌ์šฉ. ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์—์„œ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ๋ณด์—ฌ์ฃผ๋ ค๋ฉด ๊ณ ํ•ด์ƒ๋„ ๊ธฐ๊ธฐ์—์„œ๋Š” ์ด๋ฏธ์ง€ ํ™”์งˆ์ด ๋–จ์–ด์ง€๋ฏ€๋กœ, ํŠน์ • ๊ธฐ๊ธฐ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ต์ฒดํ•ด์ค€๋‹ค.

-webkit-min-device-pixel-ratio:
-webkit-max-device-pixel-ratio:
-webkit-device-pixel-ratio:
@media print {
    /* ํ™”๋ฉด์—๋Š” ์•ˆ๋ณด์ด๋˜ ์ถ•์•ฝ์–ด๊ฐ€ ์ธ์‡„ ํŽ˜์ด์ง€์—์„œ๋Š” ๋ณด์ธ๋‹ค. */
    abbr::after {
        content: '('attr(title)')';
    }
}




profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€