CSS Summary
Short Book about the grammar of the CSS Styles
1. CSS Declarations ๐ฉโ
- ๋ด์ฅ ๋ฐฉ์
- ๋งํฌ ๋ฐฉ์
- ์ธ๋ผ์ธ ๋ฐฉ์
- @import ๋ฐฉ์
- ๋ด์ฅ ๋ฐฉ์ : HTML ์ head ์์
style
์๋ฆฌ๋จผํธ์ content ๋ก ์์ฑํ๋ ๋ฐฉ์. - ์ธ๋ผ์ธ ๋ฐฉ์ : HTML ์ ์๋ฆฌ๋จผํธ์ ์์ฑ์ผ๋ก ์์ฑํ๋ ๋ฐฉ์.
- ๋งํฌ ๋ฐฉ์ : HTML ์ head ์์
link
์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ฉํด ์ธ๋ถ CSS ํ์ผ์ ๋ถ๋ฌ์ค๋ ๋ฐฉ์. - @import ๋ฐฉ์ :
@import "reset.css"
๋๋@import url("reset.css")
์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
๋งํฌ
๋ฐฉ์์ HTML ์ด ํด์๋๋ฉฐasync
๋ก ์๋ํด ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ์์ฒญํ๊ณ , ์์ ํ๋ ๋๋ก ํด์ํ๋ค. ๋ฐ๋ฉด@import
๋ฐฉ์์ ๋จผ์ ์์ฒญํ CSS ์ ์์ ์ด ๋๋๊ณ ํด์์ ํ๋ ๊ณผ์ ์@import
๋ฅผ ๋ณด๊ณ ์์ฒญ์ ํ๋ค. including ๋๋ ๋ฐฉ์์ด ์๋๊ณ lazy loading ๋๋ ๋ฐฉ์์ด๋ผ ์ผ๋ถ๋ฌ ์ฐ๊ฒฐ์ ์ง์ฐ์ํค๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ผ๋, ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ์๋๋ค. ๋ณ๋์ ๋ฒ๋ค๋ง์ด๋ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด include ์ํค๊ณ ์ง์ฐ ์คํ์ด ํ์ํ๋ฉด JavaScript ๋ก ์ ์ด๋ฅผ ํด์ผ ํ๋ค.
2. CSS Selectors ๐ฉโ
1. Basic Selectors
- Universal Selector(์ ์ฒด ์ ํ์)
* {
color: red;
}
- Type Selector(ํ๊ทธ ์ ํ์)
li {
color: red;
}
- Class Selector(ํด๋์ค ์ ํ์)
.orange {
color: orange;
}
- ID Selector(์์ด๋ ์ ํ์)
#orange {
color: orange;
}
Universal > Type > Class > ID ์์๋ก ์ ์ฉ๋๋ค. ์ข ๋ ์์ธํ CSS ์ฐ์ ์์๋ CSS Specificity๋ฅผ ์ฐธ๊ณ ํ๋ค.
2. Combinators
- Basic Combinator(์ผ์น ์ ํ์)
span.orange {
color: orange;
}
- Child Combinator(์์ ์ ํ์)
ul > .orange {
color: orange;
}
- Descendant Combinator(์์ ์ ํ์)
div .orange {
color: orange;
}
- Adjacent Sibling Combinator(์ธ์ ํ์ ์ ํ์)
.orange + li {
color: orange;
}
๋ค์ ํ์ ์๋ฆฌ๋จผํธ ํ๋๋ง ์ ํ.
- General Sibling Combinator(์ผ๋ฐ ํ์ ์ ํ์)
.orange ~ li {
color: red;
}
๋ค์ ํ์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ชจ๋๋ฅผ ์ ํ.
3. Pseudo-class
๊ฐ์ ํด๋์ค ์ ํ์๋ ๋์๊ณผ ๊ด๋ จ๋ ๊ฒ๊ณผ ๊ทธ๋ ์ง ์์ ๊ฒ ๋ ๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
1 ) ๋์๊ณผ ๊ด๋ จ๋ ๊ฐ์ ํด๋์ค ์ ํ์
- hover
๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค ๋์ ์ํ.
.box {
width: 100px;
height: 100px;
background-color: orange;
transition: 1s;
}
.box:hover {
width: 300px;
background-color: cornflowerblue;
}
- active
๋ง์ฐ์ค๋ก ํด๋ฆญ์ ์ ์ง ์ค์ธ ์ํ.
.box {
width: 100px;
height: 100px;
background-color: orange;
transition: 1s;
}
.box:hover {
width: 300px;
background-color: cornflowerblue;
}
- focus
๋ง์ฐ์ค๋ Tab
ํค์ ์ํด HTML ๋ํํ ์ฝํ
์ธ (Interactive Content)๊ฐ
ํฌ์ปค์ค ๋ ์ํ.
input:focus {
background-color: darkseagreen;
}
input
, a
, button
, label
, select
์ ๊ฐ์ ์๋ฆฌ๋จผํธ๊ฐ ํด๋น๋๋ฉฐ, HTML ๋ํํ ์ฝํ
์ธ ๊ฐ ์๋๋๋ผ๋
tabindex ์์ฑ์ ์ฌ์ฉํ ์๋ฆฌ๋จผํธ๋ focus
๊ฐ ๋ ์ ์๋ค.
<div class="box" tabindex="-1"></div>
tabindex="-1"
์์ฑ์ ์ฃผ๋ฉด ๊ฐ์ ๋ก ํฌ์ปค์ค๊ฐ ๊ฐ๋ฅํ๋๋ก ํ์ฉํ๋ค. ํค๋ณด๋์ Tab
ํค๋ก ํฌ์ปค์ค ๊ฐ๋ฅํ ๋์์ index
๋ฅผ
๊ฐ์ ๋ก ์ง์ ํ๋ ๊ฒ์ผ๋ก, -1
์ด ์๋ ๋ค๋ฅธ ๊ฐ์ ์ฃผ๋ฉด Tab
ํค์ ์ ํ๋๋ฏ๋ก ๋
ผ๋ฆฌ์ ํ๋ฆ์ ๋ฐฉํดํ๋ค. ๋ฐ๋ผ์ ํค๋ณด๋์ Tab
ํค์
์ํค ํฌ์ปค์ค ๋ ํ์๊ฐ ์๋ค๋ฉด -1
์ ์ฃผ์ด ํ๋ฆ์ ๋ฐฉํดํ์ง ์๋๋ก ํด์ผํ๋ค.
2 ) ๋์๊ณผ ๊ด๋ จ๋์ง ์์ ๊ฐ์ ํด๋์ค ์ ํ์
- first-child, last-child, nth-child, โฆ, nth-of-type
<div class="fruits">
<span>๋ธ๊ธฐ</span>
<span>์๋ฐ</span>
<div>๋ฐฐ</div>
<p>๋ง๊ณ </p>
<div>์ค๋ ์ง</div>
<h3>์ฌ๊ณผ</h3>
</div>
.fruits span:first-child {
color: orange;
}
first-child
๊ฐ ์๋ฏธํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
.fruits span {
&:first-child {
color: orange;
}
}
.fruits
์ ์์ ์ค span
์ธ ๊ฒ ์ค ์ฒซ ๋ฒ์งธ๊ฐ ์๋๋ผ, .fruits
์ ์์ ์ค span
์ด๋ฉด์ ์ฒซ ๋ฒ์งธ ์์์ธ ๊ฒ. ์ฆ And
์
๊ฐ๋
์ด๋ค. ๋ฐ๋ผ์ ๋ธ๊ธฐ๊ฐ ์ ํ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
.fruits div:first-child {
color: orange;
}
.fruits
์ ์์ ์ค div
์ธ ๊ฒ์ ์ฐพ์์ผ๋, ์ด๊ฒ์ด ์ฒซ ๋ฒ์งธ ์์์ด ์๋๊ธฐ ๋๋ฌธ์ ์ผ์นํ๋ ๋์์ด ์กด์ฌํ์ง ์๋๋ค.
๋ง์ฝ, .fruits
์ ์์ ์ค div
์ธ ๊ฒ ์ค ์ฒซ ๋ฒ์งธ๋ฅผ ์ ํํ๊ณ ์ ํ๋ค๋ฉด first-of-type
์ ์ฌ์ฉํด์ผํ๋ค.
.fruits div:first-of-type {
color: orange;
}
๋ฐ๋ผ์ ๋ฐฐ๊ฐ ์ ํ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก last-child
์ญ์ .fruits
์ ์์ ์ค h3
์ด๋ฉด์ ๋ง์ง๋ง ์์์ธ ๊ฒ์ ์ ํํ๋ค.
.fruits h3:last-child {
color: orange;
}
๋ฐ๋ผ์ ์ฌ๊ณผ๊ฐ ์ ํ๋๋ค.
nth-child
, nth-of-type
์ *
๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ํ ์ ์๋ค.
.fruits *:nth-child(even) {
color: orange;
}
/* Same with
.fruits :nth-child(even) {
color: orange;
}*/
.fruits
์ ์์ ์ค ์ง์๋ฒ์งธ ์๋ฆฌ๋จผํธ๋ฅผ ๋ชจ๋ ์ ํํ๋ค. ๋ฐ๋ผ์, ์๋ฐ, ๋ง๊ณ , ์ฌ๊ณผ๊ฐ ์ ํ๋๋ค.
์ฌ์ค
.fruits :nth-child(even)
์ ๊ฐ์ด ๊ณต๋ฐฑ์ ์ฃผ๊ณ ๊ฐ์ ์ ํ์๋ฅผ ์ฌ์ฉํด๋ ๋์ผํ ๋์์ ์ ํํ๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ.fruits:nth-child(even)
์ ๊ฐ์ด ์ค์๋ก ๊ณต๋ฐฑ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ ์ ํ ๋ค๋ฅธ ๋์์ ์ฐพ๋๋ค.
๋ฐ๋ผ์.fruits *:nth-child(even)
์ ๊ฐ์ด ๋ช ํํ ์๋๋ฅผ ํํํ๋ ๊ฒ์ด ์ข๋ค.
.fruits *:nth-of-type(even) {
color: orange;
}
/* Same with
.fruits :nth-of-type(even) {
color: orange;
}*/
.fruits
์ ์์ ์ค ๊ฐ ํ์
์ ๋ ๋ฒ์งธ๋ฅผ ์ ํํ๋ฏ๋ก, ์๋ฐ๊ณผ ์ค๋ ์ง๊ฐ ์ ํ๋๋ค.
nth-child
,first-child
,last-child
๋<br />
๊ณผ ๊ฐ์ ์๋ฆฌ๋จผํธ๋ ๋ชจ๋ ์์ ์๋ฆฌ๋จผํธ์ด๊ธฐ ๋๋ฌธ์ ์ ํ์ ์ฃผ์ํด์ผํ๋ค. ๋ฐ๋ฉด,nth-of-type
,first-of-type
,last-of-type
์ ํด๋น ํ์ ์๋ฆฌ๋จผํธ๋ง ์ ํํ๋ค.
nth-child
์nth-of-type
์ ๋ชจ๋ ๋ฑ์ฐจ์์ด(Arithmetic Sequence)์ ํฌํจํ ์ ์์ผ๋ฉฐ, CSS ์ ํ์ ์์ฒด๋1-based index
๋ฅผ ๊ฐ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ฐ์ ์์ ํฌํจ๋๋n
์ 0์ ํฌํจํ๋ ์์ฐ์๋ก0, 1, 2, 3, ...
์ ๊ฐ๋๋ค.
- not(negation selector)
.fruits *:not(div) {
color: orange;
}
/* Same with
.fruits :not(div) {
color: orange;
}*/
.fruits
์ ์์ ์ค span
์ด ์๋ ๊ฒ์ ๋ชจ๋ ์ ํํ๋ค. ๋ฐ๋ผ์, ๋ธ๊ธฐ, ์๋ฐ, ๋ง๊ณ , ์ฌ๊ณผ๊ฐ ์ ํ๋๋ค.
4. Pseudo-element
๊ฐ์ ์๋ฆฌ๋จผํธ ์ ํ์๋ ::
๋ฅผ ๋ถ์ธ๋ค(:
ํ๋๋ง ๋ถ์ฌ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์์ ํ์ง๋ง ํ์ค์ด ์๋๋ค).
- before && content
์๋ฆฌ๋จผํธ์ content ์ ์์ชฝ์ ๊ฐ์์ ์ธ๋ผ์ธ ์์ฑ์ content ๋ฅผ ์ฝ์
ํ๋ค. insertAdjacentElement()
๋ฉ์๋์
ํฌ์ง์
afterbegin
์ด ์ฝ์
๋๋ ์์น์ ๋์ผํ๋ค.
<!-- beforebegin -->
<div class="box">
<!-- afterbegin -->
foo content
<!-- beforeend -->
</div>
<!-- afterend -->
.box::before {
content: "before!!";
}
document.querySelector('.box').childNodes[0] // foo content
๊ฐ์ ์๋ฆฌ๋จผํธ๋ Node ์ ์์ ์๋ฆฌ๋จผํธ๊ฐ ์๋๋ค.
- after && content
before
์ ๋ง์ฐฌ๊ฐ์ง๋ก content ์ ๋ท์ชฝ์ ๊ฐ์์ ์ธ๋ผ์ธ ์์ฑ์ content ๋ฅผ ์ฝ์
ํ๋ค. ์์น๋ beforeend
๊ฐ ์ฝ์
๋๋
์์น์ ๋์ผํ๋ค.
.box::after {
content: "after!!";
}
before
์after
๋ ๋ฐ๋์content
์์ฑ์ ๊ฐ์ ธ์ผํ๋ค.
๊ฐ์ฑ ์๋ฆฌ๋จผํธ ์ ํ์๋ ๋จ์ง ์ธ๋ผ์ธ ํ ์คํธ๋ฅผ ์ฝ์ ํ๋ ๊ฒ ๋ฟ ์๋๋ผ ๋ค์๊ณผ ๊ฐ์ด ํ์ฉํ ์ ์๋ค.
<div class="container">
<div class="box">foo</div>
<div class="box">bar</div>
<div class="box">baz</div>
</div>
.container {
display: flex;
gap: 50px;
.box {
width: 200px;
height: 200px;
background-color: orange;
&:nth-of-type(1)::after {
content: "";
width: 50px;
height: 50px;
background-color: blueviolet;
}
&:nth-of-type(2):after {
content: "wow!";
width: 50px;
height: 50px;
background-color: blueviolet;
}
&:nth-of-type(3):after {
content: "";
display: block;
width: 50px;
height: 50px;
background-color: blueviolet;
}
}
}
- ์ฒซ ๋ฒ์งธ box ์ after ๊ฐ์ ์๋ฆฌ๋จผํธ๋ ์ธ๋ผ์ธ ์๋ฆฌ๋จผํธ์ width, height ๋ฅผ ์ฃผ์๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฐ ํจ๊ณผ๋ ์ ์ฉ๋์ง ์๋๋ค.
- ๋ ๋ฒ์งธ box ์ after ๊ฐ์ ์๋ฆฌ๋จผํธ ์ญ์ ์ธ๋ผ์ธ ์๋ฆฌ๋จผํธ์ด๋ฏ๋ก width, height ๋ ๋ฌด์๋๋, ์ ๋ ฅ๋ content ์์ญ ๋งํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ์ ์์ด ๊ธ์๊ฐ ํฌํจ๋ ์์ญ ๋งํผ ์ ์ฉ๋๋ค.
- ์ธ ๋ฒ์งธ box ์ after ๊ฐ์ ์๋ฆฌ๋จผํธ๋ ์๋ฌด๋ฐ ๊ธ์๋ก ์
๋ ฅ๋์ง ์์์ง๋ง,
display: block
์ผ๋ก ๋ธ๋ญ ์๋ฆฌ๋จผํธ๋ก ์์ฑ์ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ content ์ ์๋ ์ ๋ธ๋ญ์ ๊ฐ๊ณ , ์ฃผ์ด์ง width, height ๋งํผ ํจ๊ณผ๊ฐ ์ ์ฉ๋๋ค.
5. Attribute Selectors
-
<input type="text" data-fruits-apple="apple" />
<input type="password" />
<input type="text" disabled />
[data-fruits-apple] {
background-color: lightgreen;
}
input[type="password"] {
background-color: lightsalmon;
}
input[disabled] {
background-color: lightskyblue;
}
[type]
, [disabled]
์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ผ๋ ๋๋ฌด ๋ง์ ๋ฒ์๋ฅผ ์ ํํ๋ค. ๋ค์์ ๋์์ ์ ํํ ๋๋ class
์์ฑ์ ์ฌ์ฉํด์ผํ๋ฉฐ,
์์ ๊ฐ์ด ์ด๋ค ์๋ฆฌ๋จผํธ ์ค ํน์ ์์ฑ์ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ๊ฑฐ๋ [data-fruits-apple]
์
๊ฐ์ด ๊ธฐ๋ณธ ์์ฑ์ด ์๋ ํน์ ์์ฑ์ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
3. CSS Inheritances ๐ฉโ
1. Auto Inheritance
CSS ์คํ์ผ ์์ฑ ์ค ๊ธ์/๋ฌธ์์ ๊ด๋ จ๋ ๋๋ถ๋ถ์ ์์ฑ(color
, font-style
, font-weight
, font-size
, line-height
,
font-family
, text-align
, โฆ)์ ์ปจํ
์ด๋ ๋ด ์์์๊ฒ ์์๋๋ค(๋ชจ๋ ๊ธ์/๋ฌธ์ ์์ฑ์ด ์์๋๋ ๊ฒ์ ์๋).
2. Force Inheritance
<div class="parent">
<div class="child">
<div class="descendent"></div>
</div>
</div>
.parent {
position: relative;
width: 500px;
height: 200px;
background-color: red;
}
.child {
width: 450px;
height: 100%;
margin: 0 auto;
background-color: lightgreen;
}
.descendent {
width: 400px;
height: inherit;
margin: inherit;
background-color: blueviolet;
}
๋๋น๋ ๋์ด๊ฐ์ ๊ฒฝ์ฐ ๋๋ถ๋ถ ๋ถ๋ชจ์ ๊ฐ์ ์์ ๋ฐ์ ์ฌ์ฉํ๋ ๊ฒ ์ ๋ฆฌํ ๊ฒฝ์ฐ 100%
๋ผ๋ ๊ฐ์ ์ฃผ์ด ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง background-color
,
margin
, padding
๊ณผ ๊ฐ์ ์์ฑ์ ์ด๋ฌํ ๊ฐ์ ์ ํํ ์ ์๋ค. ์ด๋ฐ ์์ฑ ์ญ์ ๊ฐ์ผ๋ก inherit
์ ์ฃผ๋ฉด ๊ฐ์ ์์์ ์ง์ ํ ์ ์๋ค.
3. CSS Specificity
๋์ผ CSS ๊ฐ ์ฌ๋ฌ ๊ฐ ์ ์ธ๋ ๊ฒฝ์ฐ, ์ ์ฉ ์ฐ์ ์์์ ๋ฐ๋ผ ์ค์ ์ ์ฉ๋๋ ์์ฑ๊ฐ์ด ์ ํด์ง๋ค.
- ์ฐ์ ์์๊ฐ ๋์ ์ ์ธ์ด ์ ์ฉ๋๋ค.
- ๋์ผ ์ฐ์ ์์ ๋ด์์๋ ๋ง์ง๋ง์ ํด์๋ ์ ์ธ์ด ์ ์ฉ๋๋ค.
Inheritance
> Universal(*
) > Type(div
) >Class
>ID
>Inline
>!important
์์๋ก ์ ์ฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ CSS ์ฐ์ ์์ ๊ณ์ฐ์ ์ ์ํด์ผํ๋ค.
.hello {
color: red;
}
.hello {
color: green;
}
๋์ผ ์ฐ์ ์์๊ฐ ์ ์ธ๋์๊ณ , ๋ น์์ด ๋์ค์ ํด์๋๋ฏ๋ก ๊ธ์๋ ๋ น์์ด ๋๋ค.
div.hello {
color: red;
}
.hello {
color: green;
}
๊ฐ์ Class
๋ ๋ฒจ์ CSS ์ง๋ง div.hello
๋ผ๋ ๋ specific ํ ์ ํ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ธ์๋ ๋นจ๊ฐ์์ด ๋๋ค.
div .hello {
color: red;
}
.hello {
color: green;
}
div
์ด๋ฉด์.hello
์ฌ์ผ ํ๋div.hello
์ ๋ฌ๋ฆฌdiv
ํ์์.hello
๋ ๊ฐ์ ๋ ๋ฒจ์ ์กด์ฌํ๋.hello
์ ์ฐ์ ์์๊ฐ ๊ฐ๋ค. ๋ฐ๋ผ์ ๋์ผ ์ฐ์ ์์ ์ค ๋ น์์ด ๋์ค์ ํด์๋๋ฏ๋ก ๊ธ์๋ ๋ น์์ด ๋๋ค.
4. CSS Attributes ๐ฉโ
1. Box Model
1 ) Box Model
HTML ์ ๊ธฐ๋ณธ์ ์ผ๋ก Box Model
์ ์ฌ์ฉํ๋ค. ์ด์ฐฝ๊ธฐ ์น์ ์๋ ๋ฌธ์์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์๋ค. ๊ธ๊ณผ ์ฌ์ง ๊ธ๊ณผ ์ฌ์งโฆ ๋ฐ๋ผ์
์ธ๋ผ์ธ ์์ฑ๊ณผ ๋ธ๋ญ ์์ฑ ์๋ฆฌ๋จผํธ์ ๋ฐ์ค๋ฅผ ์์ ๋์๊ฐ๋ ๊ณผ์ ์ ์ฐ์์ด๋ค.
2 ) width, height
auto
: default- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
๊ธฐ๋ณธ๊ฐ auto
์ผ ๋
- ๋ฐ์ค ์๋ฆฌ๋จผํธ: width ๋ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๋งํผ ๋์ด๋๊ณ , height ๋ content ํฌ๊ธฐ ๋งํผ ์ค์ด๋ ๋ค.
- ์ธ๋ผ์ธ ์๋ฆฌ๋จผํธ: width ์ height ๋ content ํฌ๊ธฐ ๋งํผ ์ค์ด๋ ๋ค.
์๋ฆฌ๋จผํธ๊ฐ ๋ช ์์ ์ธ width, height ๊ฐ์ ๊ฐ์ง๋ ค๋ฉด
- display: block, inline-block
- position: absolute, fixed
- flex-items
๊ฐ ๋์ด์ผ ํ๋ค.
3 ) max-โฑ
max-height, max-width ๋ width, height ์ !important
๋ณด๋ค๋
๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค.
none
: default, ์ ํ ์์.- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
: auto ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ชป ํ๋ค.auto
4 ) min-โฑ
min-height, min-width ๋ width, height ์ !important
๋ณด๋ค๋
๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค.
0
: default, ์ ํ ์์.- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
: auto ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ชป ํ๋ค.auto
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 300px;
height: 200px;
background-color: royalblue;
}
.child {
height: 100px;
background: orange;
}
๊ธฐ๋ณธ๊ฐ์ผ๋ก min-width ๋ 0
, max-width ๋ none
, width ๋ auto
๋ฅผ ๊ฐ๋๋ค. ๋ธ๋ญ ์๋ฆฌ๋จผํธ์ด๋ฏ๋ก ๋ถ๋ชจ์ ํฌ๊ธฐ ๋งํผ ๋์ด๋๋ค.
.child {
max-width: 200px;
height: 100px;
background: orange;
}
max-width ๊ฐ ์ ํ๋จ์ ๋ฐ๋ผ ๋๋น๊ฐ 200์ผ๋ก ์ ํ๋๋ค.
.child {
width: 500px !important;
max-width: 200px;
height: 100px;
background: orange;
}
.child {
min-width: 200px;
width: 100px !important;
height: 100px;
background: orange;
}
์ ๋ ์ผ์ด์ค๋ ๋ชจ๋ ๋๋น๊ฐ 200์ด ๋๋ค. width ์ !important
๋ฅผ ์ฃผ๋๋ผ๋ max-width
, min-width
์ ์ฐ์ ์์๊ฐ ๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
2. Units
- px: ํฝ์ . ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ๋จ์๋ก ์ธ์ํ๋ ๋ฐ, ๋๋ฐ์ด์ค ์ํฉ์ ๋ฐ๋ผ์ ํฝ์ ์ ๋ํ ๊ธฐ์ค์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ง๋ฉด ์๋ ๋จ์๋ก ๋ณด๋ ํธ์ด ๋ง๋ค. ์๋ฌด๋ฐ ์ค์ ์ ํ์ง ์์์ ๋, ์๋ฆฌ๋จผํธ์ font-size ๊ธฐ๋ณธ๊ฐ์
16px
์ด๋ค.- %: ์๋์ ๋ฐฑ๋ถ์จ.
- em: ์๋ฆฌ๋จผํธ์ ๊ธ๊ผด ํฌ๊ธฐ์ ๋ํ ๋น์จ. ์๋ฆฌ๋จผํธ์ ๊ธ๊ผด ํฌ๊ธฐ๊ฐ
10px
์ด๋ฉด,1em
์10px
์ด ๋๋ค. font-size ๊ฐ ์์์ ์ํด ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด ์ฌ์ฉํด์ผํ๋ฉฐ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.- rem: root ์๋ฆฌ๋จผํธ(=html)์ ๊ธ๊ผด ํฌ๊ธฐ, ๊ฐ ์๋ฆฌ๋จผํธ์ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋
em
๊ณผ ๋ค๋ฅด๊ฒ html ์ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.- vw: viewport ๊ฐ๋ก ๋๋น์ ๋ฐฑ๋ถ์จ.
- vh: viewport ์ธ๋ก ๋์ด์ ๋ฐฑ๋ถ์จ.
.parent {
width: 300px;
height: 200px;
background-color: royalblue;
}
.child {
width: 20em;
height: 50%;
background: orange;
}
๋ณ๋์ font-size ์ค์ ์ ํ์ง ์์์ผ๋ฏ๋ก, ๊ธฐ๋ณธ font-size ๋ 16px
์ด๊ณ , .child
์ 1em
์ 16px
์ด๋ค. ๊ทธ๋ฐ๋ฐ 20em
์ ์ฃผ์์ผ๋ฏ๋ก,
๋๋น๋ 320px
์ด ๋๋ค.
.parent {
width: 300px;
height: 200px;
background-color: royalblue;
font-size: 10px;
}
๋ง์ฝ, ๋ถ๋ชจ์ font-size ๋ฅผ 10px
๋ก ์ฃผ๋ฉด ์์๋์ด .child
์ 1em
์ 10px
์ด ๋๊ณ , 20em
์ 200px
์ด ๋๋ค.
.child {
width: 20rem;
height: 50%;
background: orange;
}
em
์ ๋ถ๋ชจ ๋๋ ์กฐ์์ font-size ๊ฐ ๋ฌ๋ผ์ง๋ฉด, ์์์ ์ํด ํฌ๊ธฐ๊ฐ ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์
ํผ๋์ค๋ฌ์ด ๋จ์๊ฐ ๋ ์ ์์ด ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.
๋ฐ๋ฉด rem
์ ํญ์ root ์๋ฆฌ๋จผํธ์ธ html ์ font-size ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ ๋๋ฌธ์
์์์ ์ํฅ์ ๋ฐ์ง ์์ ์์ ์ ์ด๋ฉฐ,
html ์ font-size ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ๋ง์ผ๋ก
์น ์ ์ฒด์ ํฌ๊ธฐ๋ฅผ ๋น์จ๋ก ์ ์ดํ ์ ์๋ค๋ ์ฅ์ ์ ๊ฐ๋๋ค.
3. Margin
์๋ฆฌ๋จผํธ์ ์ธ๋ถ ์ฌ๋ฐฑ์ ์ง์ ํ๋ ๋จ์ถ ์์ฑ.
0
: default, ์ธ๋ถ ์ฌ๋ฐฑ ์์.auto
: ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ๋ฐฑ์ ๊ณ์ฐ(๋ธ๋ญ ์๋ฆฌ๋จผํธ & ๊ฐ๋ก ๋๋น๊ฐ ์๋ ์๋ฆฌ๋จผํธ์ ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํ์ฉ)(์ธ๋ก ์ ๋ ฌ์ ์ ๋จ).- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค(์์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ).
%: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ๊ฐ๋ก ๋๋น์ ๋ํ ๋น์จ๋ก ์ง์ ํ์ง๋ง ์ค์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ ์๋๋ค.
margin-collapsing
์ด ๋ฐ์๋๋ค.
4. Padding
์๋ฆฌ๋จผํธ์ ๋ด๋ถ ์ฌ๋ฐฑ์ ์ง์ ํ๋ ๋จ์ถ ์์ฑ.
0
: default, ๋ด๋ถ ์ฌ๋ฐฑ ์์.- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
- %: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ๊ฐ๋ก ๋๋น์ ๋ํ ๋น์จ๋ก ์ง์ ํ๋ค.
์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
Margin ๊ณผ Padding ๋ชจ๋
%
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ๊ฐ๋ก ๋๋น์ ๋ํ ๋น์จ๋ก ์ง์ ํ๋ค๊ณ ํ๋ค. ์ด ๋ถ๋ถ์์ ์ฃผ์ํด์ผ ํ ๊ฒ์ดleft
์right
๋ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์width
์ ์ํฅ์ ๋ฐ๊ณ ,top
๊ณผbottom
์ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์height
์ ์ํฅ์ ๋ฐ์ ๊ฒ ๊ฐ์ง๋ง, ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์height
๊ฐ 0์ผ๋ก ์กด์ฌํ์ง ์๋ , ๋งค์ฐ ํฐ ๊ฐ์ ๊ฐ์ง๋ ์๊ด ์์ด top, right, bottom, left ๋ชจ๋ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ๊ฐ๋ก ๋๋น์ ๋ํ ๋น์จ์ ์ฐธ์กฐํ๋ค๋ ๊ฒ์ด๋ค.์๋ฅผ ๋ค์ด
<div class="container"> <div class="item"></div> </div>
์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ , ๋ค์๊ณผ ๊ฐ์ด CSS ๋ฅผ ์ ์ํ๋ฉด, ๋์ด๋ฅผ ์ง์ ํ์ง ์์๋ ํญ์ 16:9 ๋น์จ์ ๊ณต๊ฐ์ด ์๊ฒจ๋๋ค.
.container { width: 800px; background-color: grey; .item { padding-top: 56.25%; /* 16:9 */ } }
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด ๋์์ธ์ ์ํด ๋ถํ์ํ item ์ด๋ผ๋ ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ์ง ์๊ณ Pseudo-element
before
๋๋after
๋ฅผ ์ฌ์ฉํด ๋ค์๊ณผ ๊ฐ์ด ์์ญ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค..container { width: 800px; background-color: grey; &::before { content: ""; display: block; padding-top: 56.25%; /* 16:9 */ } }
5. border
์๋ฆฌ๋จผํธ์ ํ ๋๋ฆฌ ์ ์ ์ง์ ํ๋ ๋จ์ถ ์์ฑ.
- border-width
medium
: default, ์ค๊ฐ ๋๊ป(medium, thin, thick๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ ์ ์์ด ์ฌ์ฉํ์ง ์๋๋ค).- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
- border-style
none
: default, ์ ์์.solid
: ์ค์ .dashed
: ํ์ (ํ๊ตญ์์ ์ ์ ์ด๋ผ ํํํ๋ ๊ฒ์ ์์ด๋ก๋ dotted ๊ฐ ์๋๋ผ dashed ๋ค).- ๊ทธ ์ธ dotted, double, groove, ridge, inset, outset ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋๋ค.
- border-color
black
: default.- ์์๊ฐ: CSS ์์๊ฐ์ ์ฌ์ฉํ๋ค(red, tomato ์ ๊ฐ์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅผ ์ ์์ด ๊ถ์ฅ๋์ง ์๋๋ค. ์ผ๋ฐ์ ์ผ๋ก
#
์ ์ฌ์ฉํ HEX ์์์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, RGB ๋๋ RGBA ๋ฅผ ์ฌ์ฉํ๋ค). transparent
: ํฌ๋ช ํ border ๋ฅผ ๊ตฌํํ๋ค.
border: ๋๊ป, ์ข ๋ฅ, ์์; ์ผ๋ก ์ ์ํ๋ค(๊ธฐ๋ณธ๊ฐ์ medium none black).
์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
6. border-radius
์๋ฆฌ๋จผํธ์ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ๊น๋ ๋จ์ถ ์์ฑ.
0
: default, ๋ชจ์๋ฆฌ ๊ฐ์ง.- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
๋จ์ถ ์์ฑ์ 10์ ๋ฐฉํฅ๋ถํฐ ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋๋ฉฐ ์ ์ฉ๋๋ค(i.e.
border-radius: 0 20px 0 0;
).
7. box-sizing
์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ ๊ณ์ฐ ๊ธฐ์ค์ ์ง์ ํ๋ ์์ฑ
content-box
: default, content ๋ก ํฌ๊ธฐ ๊ณ์ฐ.border-box
:content + padding + border
๋ก ํฌ๊ธฐ ๊ณ์ฐ.
<div class="item"></div>
<div class="item"></div>
.item {
width: 100px;
height: 100px;
background-color: orange;
}
- content-box
.item:first-child {
border: 4px solid red;
padding: 10px;
}
content ์ padding, border ๋ฅผ ํฉํ ์์ญ์ ํฌ๊ธฐ๋
100px(content) + 2 * 10px(padding) + 2 * 4px(border) = 128px
์ด ๋๋ค.
- border-box
.item:first-child {
border: 4px solid red;
padding: 10px;
box-sizing: border-box;
}
content + padding + border ๋ฅผ ํฉํ ์์ญ์ ํฌ๊ธฐ๊ฐ 100px ์ด๋ฏ๋ก
100px = 2 * 10px(padding) + 2 * 4px(border) + ?(content)
์์ content ์ ํฌ๊ธฐ๋ 72px
์ด ๋๋ค.
์์์ padding ๊ณผ border ๋ฅผ ์ฃผ๋ฉด ์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค๊ณ ํ๋ค. ์ด๊ฒ์
box-sizing
์ด ๊ธฐ๋ณธ๊ฐ์ธcontent-box
์ผ ๋ ํ๋์ด๋ค. ์์ ๊ฐ์ดborder-box
๋ก ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด, width ๊ฐ์ด box ์ ํฌ๊ธฐ๊ฐ ๋๋ฏ๋ก, padding ๊ณผ border ๋ฅผ ์ ์ฉํ ๋งํผ ์ญ์ผ๋ก content ์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ ๋ค.
8. overflow
์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ ์ด์์ผ๋ก content ๊ฐ ๋์ณค์ ๋, ๋ณด์ฌ์ง์ ์ง์ ํ๋ ๋จ์ถ ์์ฑ์ผ๋ก ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ์ ์ฉํ๋ ์์ฑ.
visiable
: default, ๋์น ๋ด์ฉ์ ๊ทธ๋๋ก ๋ณด์ฌ์ค.hidden
: ๋์น ๋ด์ฉ์ ์๋ผ๋.: ๋์น ๋ด์ฉ์ ์๋ผ๋. ์คํฌ๋กค๋ฐ ์์ฑ(๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ๊ฐ๋ก ์คํฌ๋กค๋ง ์๊ฒจ์ผ ํ๋๋ฐ ์ธ๋ก ์คํฌ๋กค๋ฐ๊น์ง ๊ฐ์ด ์๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ด ํ์์ auto ๋ฅผ ์ฌ์ฉํ๋ค).scroll
auto
: ๋์น ๋ด์ฉ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์๋๋ด๊ณ ์คํฌ๋กค๋ฐ ์์ฑ.
9. display
์๋ฆฌ๋จผํธ์ ํ๋ฉด ์ถ๋ ฅ(๋ณด์ฌ์ง) ํน์ฑ์ ์ง์ ํ๋ ์์ฑ.
- Type ์ ๊ธฐ๋ณธ์ผ๋ก ์ง์ ๋ ๊ฐ
block
: default, ์์(๋ ์ด์์) ์๋ฆฌ๋จผํธ. i.e.div
inline
: default, ๊ธ์ ์๋ฆฌ๋จผํธ. i.e.span
inline-block
: default, ์ธ๋ผ์ธ ์๋ฆฌ๋จผํธ์ง๋ง width, height ์์ฑ์ ์ ์ฉํ ์ ์๋ ๋ฑ ์ผ๋ถ ๋ธ๋ญ ์๋ฆฌ๋จผํธ ์์ฑ์ ์ถ๊ฐ๋ก ๊ฐ๋๋ค. i.e.img
,button
,input
,label
,textarea
,select
๋ฑ
- Type ์ ๊ธฐ๋ณธ์ผ๋ก ์ง์ ๋์ง ์๋ ๊ฐ
flex
: ํ๋ ์ค ๋ฐ์ค(1์ฐจ์ ๋ ์ด์์).grid
: ๊ทธ๋ฆฌ๋(2์ฐจ์ ๋ ์ด์์).none
: ๋ณด์ฌ์ง ํน์ฑ ์์. ํ๋ฉด์์ ์ฌ๋ผ์ง.table
,table-row
,table-cell
๋ฑ ๋ค์ํ ์์ฑ๊ฐ์ด ์กด์ฌํ๋ค.
10. opacity
์๋ฆฌ๋จผํธ์ ํฌ๋ช ๋๋ฅผ ์ง์ ํ๋ ์์ฑ.
1
: default, ๋ถํฌ๋ช .0..<1
: 1์ 100์ผ๋ก ๋ฐฑ๋ถ์จ๋ก ํ์ฐ๋์ด๋ ๊ฐ.
11. font
๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ณธ CSS ๋ฅผ ์ด๊ธฐํ ํ๊ธฐ ์ํด ์ง์ ์ ์ํ reset ์ด ์๋ reset.css
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด h1
์ ํฌ๊ธฐ์ ๊ฐ์
์คํ์ผ๋ ์ ๊ฑฐ๋์ด ํ์์ ์ ์ํด์ค์ผํ๋ค.
- font-style
normal
: default, ๊ธฐ์ธ๊ธฐ ์์.italic
: ์ดํ ๋ฆญ์ฒด.: ๋ช ํํ๊ฒ ๊ธฐ์ธ์์ด๋ผ๋ ์คํ์ผ์ด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก italic ์ ์ฌ์ฉํจ.oblique
- font-weight
normal, 400
: default, ๊ธฐ๋ณธ ๋๊ปbold, 700
: ๋๊ป๊ฒ(์ผ๋ฐ์ ์ผ๋ก 700์ด bold ๋ฅผ ์๋ฏธํ์ง๋ง ํฐํธ๋ง๋ค ๋ค๋ฅผ ์ ์๋ค).: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ๋ณด๋ค ๋ ๋๊ป๊ฒ(์์์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค).bolder
: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ๋ณด๋ค ๋ ์๊ฒ(์์์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค).lighter
100...900
: 100 ๋จ์ ์ซ์ 9๊ฐ๋ก ํํ ๊ฐ๋ฅ.
- font-size
16px
: default.- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
- %: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ํฐํธ ํฌ๊ธฐ์ ๋ํ ๋น์จ๋ก ์ง์ ํ๋ค.
: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ๋ณด๋ค ๋ ํฌ๊ฒ(์์์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค).larger
: ๋ถ๋ชจ ์๋ฆฌ๋จผํธ๋ณด๋ค ๋ ์๊ฒ(์์์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค).smaller
: 7๋จ๊ณ๋ก ํฌ๊ธฐ ํํ ๊ฐ๋ฅ.xx-small...xx-large
- line-height: ํ ์ค์ ๋์ด, ํ๊ฐ๊ณผ ์ ์ฌ(์์ ํ ์ผ์นํ๋ ๊ฐ๋
์๋).
๊ณผ๊ฑฐ flex ๊ฐ ์๋ ์์ ์๋ ์์ง ์ ๋ ฌ์ ์ํค๊ธฐ ์ํด line-height ๋ฅผ ์ฌ์ฉํ๊ณค ํ๋๋ฐ ์ง๊ธ์ flex ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ ๋ง line-height ๋ฅผ ๋ค๋ฃจ๋ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉํ๋ค.normal, 1
: default.- ์ซ์: ์๋ฆฌ๋จผํธ ๊ธ๊ผด ํฌ๊ธฐ์ ๋ฐฐ์๋ก ์ง์ .
- ๋จ์๊ฐ: px, em, vw ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
%: ์๋ฆฌ๋จผํธ ๊ธ๊ผด ํฌ๊ธฐ์ ๋น์จ๋ก ์ง์ (์ซ์๋ง์ผ๋ก ํํ ๊ฐ๋ฅ).
- font-family
- Font,
font-family: Arial, "Helvetica Neue", sans-serif;
์ ๊ฐ์ด ์์ฑํ๋ค. - ํฐํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ์๋ก ์์ฑํ๊ณ , ๊ณต๋ฐฑ์ด๋ ํน์๋ฌธ์๊ฐ ํฌํจ๋๋ฉด ๋ฐ๋์
" "
๋ก ๋ฌถ์ด์ค๋ค(์ค์ ๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ ์๋). - ๋ง์ง๋ง์ผ๋ก ํฐํธ ๊ณ์ด(serif, sans-serif, monospace, cursive, fantasy)๋ฅผ ๋ฐ๋์ ์์ฑํ๋ค.
- Font,
์ ์์ฑ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ์ง๋ง, ์ฌ๋ฌ ์์ฑ์ ๋ชจ๋ ์ ์ธํ ๊ฒฝ์ฐ ๋จ์ถ ์์ฑ์ผ๋ก ์ ์ํ๊ธฐ๋ ํ๋ค.
.nanum-gothic-regular {
font-weight: 400;
font-style: normal;
font-size: 16px;
line-height: 1.5;
font-family: "Nanum Gothic", sans-serif;
}
.nanum-gothic-regular {
font: 400 normal 16px/1.5 "Nanum Gothic", sans-serif;
}
- text-align
left
: default, ์ผ์ชฝ ์ ๋ ฌ.right
: ์ค๋ฅธ์ชฝ ์ ๋ ฌ.center
: ๊ฐ์ด๋ฐ ์ ๋ ฌ.: ์์ชฝ ์ ๋ ฌ. ์ฌ์ค์ ์ผ์ชฝ ์ ๋ ฌ๊ณผ ๊ฐ๋ค.justify
- text-decoration
none
: default, ์ฅ์ ์์.underline
: ๋ฐ์ค(a ํ๊ทธ์ ๊ฒฝ์ฐ๋ underline ์ด ๊ธฐ๋ณธ๊ฐ, ์ผ๋ฐ์ ์ผ๋ก reset ์ผ๋ก ์ ๊ฑฐํ๋ค).: ์์ค.overline
: ์ค์์ . HTML ์line-through
del
,ins
ํ๊ทธ์ ํจ๊ป ์ฌ์ฉ๋๊ณค ํ๋ค.
- text-indent
0
: default, ๋ค์ฌ์ฐ๊ธฐ/๋ด์ด์ฐ๊ธฐ ์์.์์
: ๋ค์ฌ์ฐ๊ธฐ.์์
: ๋ด์ด์ฐ๊ธฐ.-9999px
:img
์๋ฆฌ๋จผํธ๋alt
์์ฑ์ด ์๋ค. ํ์ง๋งimg
์๋ฆฌ๋จผํธ๊ฐ ์๋ ๋ค๋ฅธ ์๋ฆฌ๋จผํธ์background-image
๋ฅผ ์ฌ์ฉํด ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๊ณ , alternative text ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํดtext-indent
๋ก ํ ์คํธ๋ฅผ ์ถฉ๋ถํ ๋ด์ด์ฐ๊ธฐ ํด ํ๋ฉด์ ๋ณด์ด์ง ์๋๋ก ํ ์ ์๋๋ฐ, ์ด๋ -9999px ์ ์ฌ์ฉํ๋ค(์์์๊ฒ ์์๋๋ฏ๋ก, ๋ถ๋ชจ์๊ฒ ์ ์ฉํด ํ์ ๋ชจ๋ ์๋ฆฌ๋จผํธ์ ํ ์คํธ๋ฅผ alternative text ๋ก ์ฌ์ฉํ๊ณ ์ ๋ถbackground-image
๋ก ๋์ฒดํ ์ ์๋ค).%: ์๋ฆฌ๋จผํธ์ *๊ฐ๋ก ๋๋น**์ ๋ํ ๋น์จ๋ก ์ง์ ํ์ง๋ง ์ค์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ ์๋๋ค.
12. background
HTML ์ Box Model์ ์ฑํํ๊ณ ์์ผ๋ฉฐ, ์๋ฆฌ๋จผํธ์ ๋ฐฐ๊ฒฝ ์ ๋ณด๋ฅผ ์ง์ ํ๋ ์์ฑ.
- background-color
transparent
: default, ํฌ๋ช ํจ.- ์์๊ฐ: CSS ์์๊ฐ์ ์ฌ์ฉํ๋ค.
- background-image
none
: default, ์ด๋ฏธ์ง ์์.url("path")
: ์ด๋ฏธ์ง ๊ฒฝ๋ก.
- background-size
auto
: default, ์ด๋ฏธ์ง์ ์ค์ ํฌ๊ธฐ.- ๋จ์๊ฐ: px, em, rem ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
cover
: ๋น์จ์ ์ ์ง, ์๋ฆฌ๋จผํธ์ ๋ ๋์ ๋๋น์ ๋ง์ถ๋ค.contain
: ๋น์จ์ ์ ์ง, ์๋ฆฌ๋จผํธ์ ๋ ์งง์ ๋๋น์ ๋ง์ถ๋ค.
- background-repeat
repaet
: default, ๋ฐ๋ํ์ ๋ฐ๋ณต.repeat-x
: X์ถ ๋ฐ๋ณต.repeat-y
: Y์ถ ๋ฐ๋ณต.no-repeat
: ๋ฐ๋ณต ์์.
- background-position
0% 0%
: (X์ถ, Y์ถ)์ ๋ฐฑ๋ถ์จ.- ๋ฐฉํฅ:
top
,bottom
,left
,right
,center
๋ ๋ฌผ๋ก ์ด๊ณ ,top right
์ ๊ฐ์ด ๋ณตํฉ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. - ๋จ์๊ฐ: (X์ถ, Y์ถ)์ px, em, rem ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
์ด๋ฏธ์ง์ ์ข์ธก ์๋จ ๋ชจ์๋ฆฌ๋ฅผ ์์ ์ผ๋ก ํ๋ XY์ถ 2์ฐจ์ ํ๋ฉด์ ์ฌ๋ ค๋๊ณ , ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ผ๋ง๋ X์ถ, Y์ถ์ผ๋ก ํํ์ด๋์ํค๋์ ๋ฐ๋ผ ์ด๋ฏธ์ง ์์น๊ฐ ๊ฒฐ์ ๋๋ค.
์ ์ด๋ฏธ์ง๋ 400px, 400px
์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. 100px, 100px
๋ก ์ ํํ๋ฉด ํ๋์ ์ฌ๊ฐํ(1๋ฒ)๋ง ๋ณด์ผ ๊ฒ์ด๋ค.
<div class="bg-item"></div>
.bg-item {
width: 100px;
height: 100px;
background-image: url("/assets/images/posts/2024-02-03-css-summary/background-position.png");
}
background-position
์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ํํ์ด๋์ํจ๋ค๊ณ ํ๋ค. ์ฆ, 7๋ฒ์ ๋ณด์ด๊ฒ ํ๊ณ ์ถ๋ค๋ฉด,
X์ถ์ผ๋ก -200px, Y์ถ์ผ๋ก -100px ๋งํผ ์ด๋์์ผ์ผ ํ๋ค. ์ฆ, div
๋ผ๋ ์์ญ์ ๊ณ ์ ๋ ์์น์ 100px, 100px
๋งํผ์
์์ญ์ ๊ฐ์ง๊ณ ์๊ณ , ๊ทธ ๋ค์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๊ฐ -200px, -100px
๋งํผ ์ด๋ํด 7๋ฒ์ด ๋ณด์ด๊ฒ ๋๋ ๊ฒ์ด๋ค.
.bg-item {
width: 100px;
height: 100px;
background-image: url("/assets/images/posts/2024-02-03-css-summary/background-position.png");
background-position: -200px -100px;
}
๋ง์ฐฌ๊ฐ์ง๋ก, ํ์ฌ div
์ width ์ height ๊ฐ ๊ฐ๊ฐ 100%
์ด๋ฏ๋ก, -200%, -100%
์ ๊ฐ์ด ๋ฐฑ๋ถ์จ์ ์ฌ์ฉํด ํํํ ์ ์๋ค.
.bg-item {
width: 100px;
height: 100px;
background-image: url("/assets/images/posts/2024-02-03-css-summary/background-position.png");
background-position: -200% -100%;
}
- background-attachment
scroll
: ์ด๋ฏธ์ง๊ฐ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐ๋ผ์ ๊ฐ์ด ์คํฌ๋กค ๋๋ค.fixed
: ์ด๋ฏธ์ง๊ฐ viewport ์ ๊ณ ์ . ์คํฌ๋กค ๋์ง ์๋๋ค(position fixed ์ ์ ์ฌํ๋ค).: ์๋ฆฌ๋จผํธ ๋ด ์คํฌ๋กค ์ ์ด๋ฏธ์ง๊ฐ ๊ฐ์ด ๋๋ค.local
5. CSS Layout Attributes ๐ฉโ
background ์์ฑ์์์ background-position
์ ์๋ฆฌ๋จผํธ ๋ด ์์น๋ฅผ ์ง์ ํ๋ ์์ฑ์ด์๋ค.
์ด๊ฒ์ ์๋ฆฌ๋จผํธ ๋ด๋ถ๋ผ๋ ๊ธฐ์ค์ด ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๊ธฐ์ค์ ์ค์ ํ ํ์ ์์ด
์์น๋ง ์ง์ ํ๋ฉด ๋๋ค.
ํ์ง๋ง HTML ์๋ฆฌ๋จผํธ๋ค์ ์์น๋ฅผ ์ง์ ํ ๋๋ ๋ฐ๋์ โ ์์น์ ๊ธฐ์ค์ ์ง์ ํ๊ณ , โก ์์น๋ฅผ ์ง์ ํด์ผํ๋ค.
1. position
์๋ฆฌ๋จผํธ์ โ ์์น์ ๊ธฐ์ค์ ์ง์ ํ๋ ์์ฑ.
static
: default, ๊ธฐ์ค ์์.relative
: ์๋ฆฌ๋จผํธ ์์ ์ ๊ธฐ์ค์ ์ผ๋ก ์ง์ (relative ์ ์ํด ์ด๋ํ ๊ฒ์ Flex - Order ์ฒ๋ผ ์๊ฐ์ ์ผ๋ก๋ง ์ด๋๋ ๊ฒ์ผ ๋ฟ ์ฒ๋ผ ์ค์ ๋ฐฐ์น๊ฐ ์ด๋ํ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ํ์ ์๋ฆฌ๋จผํธ์ ๋ฐฐ์น์ ์ํฅ์ ์ฃผ์ง ์๋๋ค).absolute
: ๊ธฐ์ค์ ์ด ์กด์ฌํ๋ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ๋ฅผ ๊ธฐ์ค(relative ์ ๊ฐ์ด ๊ธฐ์ค์ ์ด ์ง์ ๋ ๋ถ๋ชจ๋ฅผ ์ฐพ์ ์ฌ๋ผ๊ฐ๋ค. ์์น ๊ธฐ์ค์ ์ด ์๋ค๋ฉด root ์ธ HTML ๋ก ์ฌ๋ผ๊ฐ๋ค).fixed
: viewport(๋ธ๋ผ์ฐ์ )๋ฅผ ๊ธฐ์ค.sticky
: ์คํฌ๋กค ์์ญ ๊ธฐ์ค.
position
๊ณผ ํจ๊ป ์ฌ์ฉํ๋ CSS ์์ฑ์top
,bottom
,left
,right
,z-index
๋ฑ์ด ์์ผ๋ฉฐ, ์์๊ฐ์ด ๊ฐ๋ฅํ๋ค.
auto
: default, ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณ์ฐ.- ๋จ์๊ฐ: px, em, rem ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
position
์ ์์ฑ๊ฐ์ผ๋ก absolute, fixed๊ฐ ์ง์ ๋ ์๋ฆฌ๋จผํธ๋ display ์์ฑ์ด block ์ผ๋ก ๋ณ๊ฒฝ๋๋ค. ํ์ง๋ง ์ฃผ์ํด์ผ ํ ๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก block ์๋ฆฌ๋จผํธ๋ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๋งํผ width ๊ฐ ๋์ด๋์ง๋ง, absolute, fixed ๊ฐ ์ง์ ๋๋ฉด inline ์๋ฆฌ๋จผํธ์ ๊ฐ์ด width ๊ฐ content ํฌ๊ธฐ ๋งํผ ์ค์ด๋ ๋ค. ๋ฐ๋ผ์,header
์ ๊ฐ์ ์๋ฆฌ๋จผํธ์fixed
๋ฅผ ์ง์ ํ๋ฉด์ ๋๋น๋ฅผ ๋ค ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉดwidth: 100%;
๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ผํ๋ค.
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.container {
width: 300px;
background-color: royalblue;
}
.container .item {
border: 4px dashed red;
background-color: orange;
&:nth-child(1) {
width: 100px;
height: 100px;
}
&:nth-child(2) {
width: 140px;
height: 70px;
}
&:nth-child(3) {
width: 70px;
height: 120px;
}
}
์์ ๊ฐ์ด ๋ธ๋ญ ์๋ฆฌ๋จผํธ div
๊ฐ ์ฐจ๋ก๋๋ก ์์ฌ ์๋ค. ์ฌ๊ธฐ์ 2๋ฒ ์์๋ฅผ relative ๋ฅผ ์ด์ฉํด ์ด๋์์ผ๋ณด์.
&:nth-child(2) {
width: 140px;
height: 70px;
position: relative;
top: 30px;
left: 120px;
}
2๋ฒ ์์์ ๊ณต๊ฐ์ด ๋น์์ง๋ง, Flex - Order ์ฒ๋ผ ์๊ฐ์ ์ผ๋ก๋ง ์ด๋๋ ๊ฒ์ผ ๋ฟ ์ฒ๋ผ ์ค์ ๋ฐฐ์น๊ฐ ์ด๋ํ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ 3๋ฒ ์์์ ๋ฐฐ์น์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
relative
๋ Position - Relative์ ๊ฐ์ด ์์ ์ ์์น๋ฅผ ์๋๊ฐ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํด์๋ ์ฌ์ฉํ์ง๋ง ์ด๋ฐ์์ ๋ฐฐ์น๋ ์๊ฐ์ ์ผ๋ก
๋น ๊ณต๊ฐ์ ๋ง๋ค์ด๋ด๊ณ , ์ฌ์ฉ์์๊ฒ ๋ฌด์ธ๊ฐ ๋๋ฝ๋ ๋๋์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค. ์ฃผ๋ก ์์์ absolute
์ ์ ์ฉ๋
โ ์์น๋ฅผ ๊ธฐ์ค์ ์ง์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
.container {
width: 300px;
background-color: royalblue;
position: relative;
}
.container .item {
border: 4px dashed red;
background-color: orange;
&:nth-child(1) {
width: 100px;
height: 100px;
}
&:nth-child(2) {
width: 140px;
height: 70px;
position: absolute;
bottom: 30px;
right: 30px;
}
&:nth-child(3) {
width: 70px;
height: 120px;
}
}
2. Stack Order โญ๏ธ
- ์๋ฆฌ๋จผํธ์ position ์์ฑ์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ ์์ ์์ธ๋ค (default ๊ฐ ์ธ static ์ ์ ์ธ).
- 1๋ฒ ์กฐ๊ฑด์ด ๋์ผํ ๊ฒฝ์ฐ,
z-index
๊ฐ์ด ๋์ ์๋ก ์์ ์์ธ๋ค. - 2๋ฒ๊น์ง ์กฐ๊ฑด์ด ๋์ผํ ๊ฒฝ์ฐ, HTML ์ด ๋์ค์ ์์ฑ๋ ์๋ก ์์ ์์ธ๋ค.
3. z-index
์๋ฆฌ๋จผํธ์ Z์ถ ๋์ด๋ฅผ ์ง์ ํ๋ ์์ฑ.
auto, 0
: default.์์
: ์ซ์๊ฐ ๋์ ์๋ก ์์ ์์.์์
: ์์๊ฐ ๊ฐ๋ฅํ๋, ์ผ๋ฐ์ ์ผ๋ก-1
์ธ ๋ ์์ ์์๊ฐ์ ์ฌ์ฉ๋์ง ์๋๋ค. ๋ณต์กํ๊ณ ์ค์ฒฉ๋ z-index ๊ตฌ์กฐ๊ฐ ํ์ํ๋ฉด ์์ ์ฌ์ฉ.
z-index
๋ฅผ ๊ด๋ฆฌํ ๋,999
์ ๊ฐ์ ๊ฐ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค. ์ถํ ๋ ์์ ์์ฌ์ผ ํ๋ค๋ฉด ์ด๊ฒ๋ณด๋ค ๋ ํฐ ๊ฐ์ด ํ์ํ๊ฒ๋๊ณ , ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง๋ค. ๊ฐ๊ธ์ 1๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฌ์ฉํด ๋์๊ฐ๋๋ก ํ๋ค.
6. CSS Flex Layout ๐ฉโ
Flex
๋ container ์ ์ง์ ํ๋ ์์ฑ๊ณผ Item
์ ์ง์ ํ๋ ์์ฑ์ผ๋ก ๋๋๋ค.
1. flex direction and wrap(container)
- display
flex
: ๋ธ๋ญ ์๋ฆฌ๋จผํธ ์์ฑ์ ๊ฐ๋ flex ์ปจํ ์ด๋๋ฅผ ์ ์ํ๋ค.inline-flex
: ์ธ๋ผ์ธ ์๋ฆฌ๋จผํธ ์์ฑ์ ๊ฐ๋ flex ์ปจํ ์ด๋๋ฅผ ์ ์ํ๋ค.
- flex-direction: main-axis ์ ๋ฐฉํฅ์ ์ง์ ํ๋ ์์ฑ. ๋จ์ํ row, column ๋ง ์ง์ ํ๋ ๊ฒ ์๋๋ผ ์ถ๊ณผ
๋ฐฉํฅ์ ์ง์ ํ๋ ๊ฒ์์ ๊ธฐ์ตํด์ผํ๋ค.
row
: default, left -> rightrow-reverse
: right -> leftcolumn
: top -> bottomcolumn-reverse
: bottom -> top
- flex-wrap: ์ปจํ
์ด๋์ ์ง์ ํ๋ ์์ฑ์ผ๋ก, ์์ดํ
์ ์ค๋ฐ๊ฟ ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ ์์ฑ.
nowrap
: ์ค๋ฐ๊ฟ ์์.wrap
: ์ฌ๋ฌ ์ค์ ํ๋์ ์ปจํ ์ด๋๋ก wrapping. ์ค๋ฐ๊ฟ ์์.wrap-reverse
: wrap ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก wrapping.
๋ง์ฝ bottom-right ์์ ์์ํด์ top-left ๋ก ์์ ์ญ์์ผ๋ก ์๊ณ ์ ํ๋ค๋ฉด,
flex-flow: row-reverse wrap-reverse;
๋๋flex-flow: column-reverse wrap-reverse;
๋ฅผ ์ฌ์ฉํด ์์ ํ ์ญ์์ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
2. justify-content(container)
main-axis ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ ์์ฑ.
flex-start
: ์์์ ์ ๋ ฌ.flex-end
: ๋์ ์ ๋ ฌ.center
: ๊ฐ์ด๋ฐ ์ ๋ ฌ.space-around
: ์ ๋์ด ๋ถ์ง ์๋๋ค. ์ด๋ฆ๊ณผ ๊ฐ์ด ์์ดํ ์ฃผ๋ณ์ผ๋ก ๊ณต๊ฐ์ด ์๊ธด๋ค. ์ด๊ฒ์ ๊ฐ ์์ดํ ์ ๋์ผํ padding ์ ์ค ๊ฒ๊ณผ ๊ฐ๋ค(padding ์ collapsing ์ด ์์ผ๋ฏ๋ก,์์ดํ -์์ดํ
์ ๊ฐ๊ฒฉ์์์ดํ -์์์ /๋์
๊ฐ๊ฒฉ์ 2๋ฐฐ๊ฐ ๋๋ค).space-evenly
: ์ ๋์ด ๋ถ์ง ์๋๋ค. ์ด๋ฆ๊ณผ ๊ฐ์ด ๋ชจ๋ ๊ณต๊ฐ์ด ๋์ผํ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค. ์ด๊ฒ์ ๊ฐ ์์ดํ ์ ๋์ผํ margin ์ ์ค ๊ฒ๊ณผ ๊ฐ๋ค(margin-collapsing ์ด ๋ฐ์ํ๋ฏ์์ดํ -์์ดํ
๊ฐ๊ฒฉ์ด 2๋ฐฐ๊ฐ ์๋ 1๋ฐฐ๋ก ์์๋๋ค).space-between
: ์ ๋์ด ์์์ ๊ณผ ๋์ ์ ๋ถ๋๋ค. ์ด๋ฆ๊ณผ ๊ฐ์ด ์์ดํ ์ฌ์ด์ ๋ฐฐ์น๋๋ค. 2๊ฐ๊น์ง๋ ์ ๋์ ์ผ๋ก ๋ฐฐ์น๋๊ณ , 3๊ฐ์งธ๋ถํฐ ๋ ์์ดํ ์ฌ์ด์ ๋ด๋ถ ์ฌ๋ฐฑ์ ๊ท ๋ฑํ๊ฒ ๊ฐ๋๋ก ๋ฐฐ์น๋๋ค.
3. align-content, align-items(container)
- align-content: cross-axis ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ ์์ฑ. stretch ๋ฅผ ์ ์ธํ๋ฉด
justify-content
์ ์์ ํ ๋์ผํ ๋ฐฐ์น ํน์ฑ์ ๊ฐ์ง๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก wrapping ๋์ด 2์ค ์ด์์ผ ๋ ์ฌ์ฉ๋๋ค.stretch
: default, ์์ดํ ์ ๋์ด๊ฐ ์ง์ ๋์ง ์์์ ๊ฒฝ์ฐ, ์์ดํ ์ height ๋auto
๊ฐ ๋์ด ์ปจํ ์ด๋ ๋์ด ๋งํผ ๊ณต๊ฐ์ ์ฑ์ด๋ค. ๋ฐ๋ฉด, ์์ดํ ๋์ด๊ฐ ์ง์ ๋์์ ๊ฒฝ์ฐ ์ฌ์ค์flex-start
์ ๊ฐ๋ค.- ๊ทธ ์ธ
flex-start
,flex-end
,center
,space-around
,space-evenly
,space-between
์ justify-content ์ ๊ฐ๋ค.
- align-items: cross-axis ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ ์์ฑ.
align-content: stretch;
๋ผ๋ ๊ฐ์ ํ์ ์ ์ฉ๋๋ ์์ฑ์ผ๋ก, align-content ๊ฐ stretch ๊ฐ ์๋ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๋ฉด align-items ์!important
๋ณด๋ค๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ ธ align-items ๋ ๋ฌด์๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, 1์ค์ผ ๋ ์ฌ์ฉ๋๋ค.stretch
: default, ์์ดํ ์ ๋์ด๊ฐ ์ง์ ๋์ง ์์์ ๊ฒฝ์ฐ, ์์ดํ ์ height ๋auto
๊ฐ ๋์ด ์ปจํ ์ด๋ ๋์ด ๋งํผ ๊ณต๊ฐ์ ์ฑ์ด๋ค. ๋ฐ๋ฉด, ์์ดํ ๋์ด๊ฐ ์ง์ ๋์์ ๊ฒฝ์ฐ ์ฌ์ค์flex-start
์ ๊ฐ๋ค.flex-start
,flex-end
,center
๋ align-content ๊ฐ 1์ค์ผ ๋ ์ ์ฉํ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ๋๋ค.- align-content ์ ๋ฌ๋ฆฌ
space-around
,space-evenly
,space-between
์ด ์กด์ฌํ์ง ์๋๋ค.
align-content, align-items ์ด๋ค๊ฑธ ์ฌ์ฉํ ๊น?
- ์ผ๋ฐ์ ์ผ๋ก 1์ค์ด๋ฉด align-items, 2์ค ์ด์์ด๋ฉด align-content ๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง 1์ค์ด๋ผ๊ณ align-content ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ฒ์ ์๋๋ค. align-items ๋ wrap, no-wrap ๋ชจ๋์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , align-content ๋ wrap ์ผ ๊ฒฝ์ฐ๋ง ์ฌ์ฉ ๊ฐ๋ฅ ํ ๊ฒ์ด ์ค์ํ ์ฐจ์ด์ ์ด๋ค. wrap ์ด๋ฉด์ ์ค์ ๋ก ๊ทธ๋ ค์ง๋ ์๋ฆฌ๋จผํธ๊ฐ 2์ค์ด ๋์์ ๋์ ์ ๋ ฌ ๋ชจ์์ด ๋ค๋ฅด๋ฏ๋ก ์ฉ๋์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋๋ค.
- 1์ค์ผ ๋ align-items ์ align-content ์
stretch
,flex-start
,flex-end
,center
๋ ๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ๋๋ค. - 2์ค์ผ ๋ align-items ์ align-content ์
stretch
๋ ๋์ผํ์ง๋งflex-start
,flex-end
,center
๋ ๋ค๋ฅธ ํจ๊ณผ๋ฅผ ๊ฐ๋๋ค (2์ค์ผ ๋ align-items ์ ์ฉ์ด ๋ถ๊ฐ๋ฅํจ์ด ์๋์ ์ ์). - align-items ๋ 2์ค ์ด์์ผ ๋๋ง ์ ์ฉ ๊ฐ๋ฅํ
space-around
,space-evenly
,space-between
์ด ์กด์ฌํ์ง ์๋๋ค. ์ด ํจ๊ณผ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด align-content ๋ฅผ ์ฌ์ฉํด์ผํ๋ค. - align-content ๊ฐ stretch ๊ฐ ์๋ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๋ฉด,
align-items ์
!importnat
๋ณด๋ค๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค.
- align-items: flex-start -
- align-content: flex-start -
- align-items: center -
- align-content: center -
๋ง์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ CSS ๋ฅผ ์ ์ฉํด
justify-content
,align-content
์ ๊ฐ์ด content ๋ฅผ ์ ๋ ฌํ๋ค๋ ๊ฒ์, main-axis ๊ฐ ๋์๋ cross-axis ๊ฐ ๋์๋ ๊ฐ ์ถ์ ์์ดํ ๋ค์ด ์ด๋ค ๋ถํฌ๋ก ๋ฐฐ์น๋๋์ง๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ฉด,align-items
๋align-content
์ ๋ง์ฐฌ๊ฐ์ง๋ก cross-axis ์ ๋ํ ์ ๋ ฌ์ ์ง์ ํ์ง๋ง, wrap ์ํ์ด๋ , nowrap ์ํ์ด๋ ์์ดํ ๋ค์ ๋ฌถ์์ด ์ปจํ ์ด๋ ๋ผ์ธ์์ ์ด๋ ์์น์ ๋ถํฌํ ์ง๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค. ์ฆ, cross-axis ์ถ์ ์์ดํ ์ ๋ถํฌ๊ฐ ์๋ main-axis ์ ์ถ ์์ฒด๋ฅผ cross-axis ๋ฐฉํฅ์ ์ด๋์ ์์นํ ๊ฑด์ง ํํ์ด๋ ์ํค๋ ๊ฐ๋ ์ ๊ทผ์ ํ๋ค.
4. align-self(item)
์์ดํ ์ ๊ฐ๋ณ์ ์ผ๋ก cross-axis ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ ์์ฑ. ์ปจํ ์ด๋๊ฐ ์๋ ์์ดํ ์ ์ง์ ํ๋ ์์ฑ์ด๋ค.
.container {
width: 100vw;
height: 100vh;
background-color: royalblue;
display: flex;
flex-wrap: wrap;
.item {
width: 100px;
height: 100px;
border: 4px dashed red;
background-color: orange;
&:nth-child(1) {
align-self: center;
}
&:nth-child(even) {
align-self: flex-end;
}
}
}
.container {
width: 100vw;
height: 100vh;
background-color: royalblue;
display: flex;
flex-wrap: wrap;
.item {
width: 100px;
height: 100px;
border: 4px dashed red;
background-color: orange;
&:nth-child(even) {
align-self: flex-end;
}
}
}
5. order(item)
์์ดํ ์ ์ ๋ ฌ ์์๋ฅผ ์ง์ ํ๋ ์์ฑ.
0
: default, ์์ ์์.- ์ซ์: ์ซ์๊ฐ ์์์๋ก ์์์ ์, ํด ์๋ก ๋์ ์ ์์นํ๋ค(์์, ์์ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ).
HTML ์ ์์ ์์ด ์์ดํ ์ ๋ ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
.container {
width: 100vw;
height: 100vh;
background-color: royalblue;
display: flex;
flex-wrap: wrap;
.item {
width: 100px;
height: 100px;
border: 4px dashed red;
background-color: orange;
&:nth-child(1) {
order: 2;
}
&:nth-child(3) {
order: 1;
}
&:nth-child(5) {
order: -1;
}
}
}
6. flex-grow & flex-basis(item)
์์ดํ ์ ๋๋น๊ฐ ์ฆ๊ฐ๋๋ ๋น์จ์ ์ง์ ํ๋ ์์ฑ.
flex ๋ฅผ ์ฌ์ฉํ ๋ ์ปจํ ์ด๋์ ๋๋น๋ฅผ ์์ดํ ์ ๋๋น๊ฐ ์ ํํ ์ ์๋ฐฐ๋ก ์ผ์นํด ๋น ๊ณต๊ฐ ์์ด ๊ฐ๋ ์ฑ์ฐ์ง ์๋ ํ ํญ์ ๋น ๊ณต๊ฐ์ด ๋จ๊ฒ ๋๋ค. ์ปจํ ์ด๋์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๋ค๋ฉด ์์ดํ ์ด ์ง์ ๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ๋ ์ปค์ง๋๋ก ๋์ด๋์ผํ๋ค.
0
: default, ์ฆ๊ฐ ๋น์จ ์์.- ์ซ์: ์ฆ๊ฐ ๋น์จ ์ง์ .
- ์์ดํ ์ ์ฒด๋ฅผ ๊ท ์ผํ๊ฒ ๋๋ฆฌ๊ธฐ
.container {
width: 100vw;
height: 100vh;
background-color: royalblue;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
.item {
width: 100px;
height: 100px;
border: 4px dashed red;
background-color: orange;
flex-grow: 1;
}
}
์์ดํ ์ ์ฒด์ flex-grow ๋ฅผ 0์ด ์๋ ๋ค๋ฅธ ๊ฐ์ ์ฃผ๋ฉด ๊ฐ์ ๋น์จ๋ก ๋์ด๋๋ค.
- ์๋ก ๋ค๋ฅธ ๋น์จ๋ก ๋๋ฆฌ๊ธฐ(๋ฐ๋์
flex-basis: 0;
์์ฑ์ ์ค์ผ ํ๋ค)
.container {
width: 100vw;
height: 100vh;
background-color: royalblue;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
.item {
width: 100px;
height: 100px;
border: 4px dashed red;
background-color: orange;
flex-grow: 1;
flex-basis: 0;
&:nth-child(3) {
flex-grow: 2;
}
}
}
๋ชจ๋ ์์ดํ
์ ๋์ผํ 1์ ๋น์จ์ ์ค ๋ค์ 3๋ฒ์งธ ์์ดํ
๋ง 2๊ฐ ๋ฎ์ด ์ผ๊ธฐ ๋๋ฌธ์ 1:1:2
๋ก ๋์ด๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก flex-grow ์ flex-shrink ์ด ๋์ด๋๊ณ ์ค์ด๋๋ ๋น์จ์ ์์ดํ ์ ํฌ๊ธฐ ๋น์จ์ ์ง์ ํ๋ ๊ฒ์ด ์๋, ์์ดํ ์ content ๋ฅผ ์ ์ธํ ์ฌ๋ฐฑ์ด ๋์ด๋๊ฑฐ๋ ์ค์ด๋๋ ๋น์จ์ ์ค์ ํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ด๋ถ content ์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ์ผ๋ก ์์ดํ ์ ํฌ๊ธฐ ์์ฒด์ ๋น์จ๋ก ๊ณ์ฐ๋๋๋ก ํ๊ธฐ ์ํด content ๋ฅผ
0
์ผ๋ก ๊ณ ์ ์ํค๋ ์์ฑ๊ฐ์ดflex-basis: 0;
์ด๋ค.
- flex-basis: 0 ์ ์ค์ ํ์ง ์์์ ๋ content ๋ฅผ ์ ์ธํ ์ฌ๋ฐฑ์ ๋น์จ๋๋ก ๋์ด๋๋ ๋ชจ์ต
section article:nth-of-type(1) {
flex-grow: 1;
}
section article:nth-of-type(2) {
flex-grow: 2;
}
section article:nth-of-type(3) {
flex-grow: 3;
}
์์ดํ
์ด ์๋ content ๋ฅผ ์ ์ธํ ์ฌ๋ฐฑ์ด 1:2:3
๋น์จ๋ก ๋์ด๋๋ค.
7. flex-shrink(item)
์์ดํ ์ ๋๋น๊ฐ ๊ฐ์๋๋ ๋น์จ์ ์ง์ ํ๋ ์์ฑ.
flex-grow ๋ ์ปจํ ์ด๋๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด ์์ดํ ์ด ์ง์ ๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ๋ ์ปค์ง๋๋ก ๋์ด๋ฌ๋ค. ์ด๋ฒ์ ๋ฐ๋๋ก ์ปจํ ์ด๋๊ฐ ์์ดํ ์ด ํฌ๊ธฐ๋ฅผ ์ ์งํ๊ธฐ ์ํด ํ์ํ ๊ณต๊ฐ๋ณด๋ค ์์ ๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ์กด์ฌํ ์ ์๋๋ก ํ๋ ค๋ฉด โ wrapping ์์ผ ์ค์ด ๋๋๋๋ผ๋ ํ๋์ ์ปจํ ์ด๋๋ก ๋ฌถ์ด๋๋ก ์ฌ๋ฌ ์ค์ ๋ง๋ค๊ฑฐ๋, โก ์์ดํ ์ด ์ค์ด๋ ์ปจํ ์ด๋์ ๋ง๊ฒ ํจ๊ป ์ค์ด์ผํ๋ค.
1
: default, ๋๋น์ ๋ฐ๋ผ ๊ฐ์ ๋น์จ ์ ์ฉ.- ์ซ์: ๊ฐ์ ๋น์จ ์ง์ .
0
: ๊ฐ์ ๋๋น ์์.
- flex-shrink ๊ฐ 0 ์ด๋ฉด ์ปจํ ์ด๋๊ฐ ์์ดํ ์ด ์ฐจ์งํ๋ ๊ณต๊ฐ๋ณด๋ค ์ค์ด๋ค๋ฉด ์์ดํ ์ด ์ปจํ ์ด๋ ๋ฐ์ผ๋ก ๋๊ฐ๊ฒ ๋๋ค.
์ผ๋ฐ์ ์ด์ง๋ ์์ง๋ง ๋๋ก๋ flex-wrap ๋์ ์์ดํ
์ด ํฌ๊ธฐ๋ฅผ ์ ์งํ๋๋ก ํ๊ธฐ ์ํด flex-shrink ์ 0
์ ์ฃผ๊ธฐ๋ ํ๋ค.
flex-grow ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ดํ ์ ํฌ๊ธฐ ๋น์จ์ด ์๋ ์์ดํ ์ content ๋ฅผ ์ ์ธํ ์ฌ๋ฐฑ์ด ์ค์ด๋๋ ๋น์จ์ ์ค์ ํ๋ ๊ฒ์ด๋ค. ๋จ, flex-grow ์ ๋ค๋ฅด๊ฒ flex-basis ๋ฅผ
0
์ผ๋ก ์ฃผ๊ฒ ๋๋ฉด ์ต์ํ์ content ์์ญ์ด ๋ณด์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ content ๊ณต๊ฐ์ ์ ์ธํ ๋ชจ๋ ์ฌ๋ฐฑ์ด ์์ ํ ์ค์ด๋ค๊ฒ ๋๋ค. ์ฆ, ํญ์ ์์ดํ ๋๋น๊ฐ์ดauto
์ธ ๊ฒ๊ณผ ๊ฐ์์ ธ๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์ flex-shrink ๋ flex-grow ์ ๋ฌ๋ฆฌ ์์ดํ ์ ๋น์จ์ ์๊ฐ์ ์ผ๋ก ๋ง์ถ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- ์ผ๋ฐ์ ์ผ๋ก flex-shrink ๊ฐ ์ค์ด๋๋ ๋ฐฉ์
section article:nth-of-type(1) {
flex: 3;
}
section article:nth-of-type(2) {
flex: 2;
}
section article:nth-of-type(3) {
flex: 1;
}
์์ดํ
์ด ์๋ content ๋ฅผ ์ ์ธํ ์ฌ๋ฐฑ์ด 1/3 : 1/2 : 1
์ ๋น์จ๋ก ์ค์ด๋ ๋ค.
8. flex-basis(item)
์์ดํ ๊ณต๊ฐ ๋ฐฐ๋ถ ์ ๊ธฐ๋ณธ ๋๋น
auto
: ์๋ฆฌ๋จผํธ์ content ๋๋น.- ๋จ์๊ฐ: px, em, rem ๋ฑ ๋จ์๋ฅผ ์ง์ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก content ์ ํฌ๊ธฐ๋ฅผ CSS ๋ก ์ ์ํ ์ผ์ด ๊ฑฐ์ ์๋ค. ์ ์ํ๋ค ํ๋๋ผ๋ ์ค์ HTML ์ ์กด์ฌํ๋ content ์ ํฌ๊ธฐ๊ฐ ์ฐ์ ๋๊ธฐ
๋๋ฌธ์ด๋ค. ์ด๊ฒ์ flex-grow ์์ ๋ณธ ๊ฒ์ฒ๋ผ ์ฃผ๋ก flex-grow ์ ๋์ด๋๋ ๋น์จ์ด ์๊ฐ์ ์ผ๋ก
์์ดํ
๋น์จ๊ณผ ์ผ์นํ๋๋ก content ํฌ๊ธฐ๋ฅผ 0
์ผ๋ก ๊ณ ์ ํ ๊ณ์ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
7. Animation - Transition ๐ฉโ
์๋ฆฌ๋จผํธ์ ์ ํ(์์๊ณผ ๋) ํจ๊ณผ๋ฅผ ์ง์ ํ๋ ๋จ์ถ ์์ฑ.
transition: property duration timing-function delay ์ ๊ฐ์ด ์์ฑํ๋ฉฐ, ๋จ์ถ ์์ฑ์ผ๋ก ์ ์์ ์ง์์๊ฐ์ ๋ฐ๋์ ๋ฐ๋์ ์์ฑํด์ผํ๋ค.
1. transition-property
์ ํ ํจ๊ณผ๋ฅผ ์ฌ์ฉํ ์์ฑ ์ด๋ฆ์ ์ง์ .
all
: default, ๋ชจ๋ ์์ฑ์ ์ ์ฉ.- ์์ฑ๋ช : ์ ํ ํจ๊ณผ๋ฅผ ์ฌ์ฉํ ์์ฑ ์ด๋ฆ ๋ช ์.
2. transition-duration
์ ํ ํจ๊ณผ์ ์ง์์๊ฐ์ ์ง์ ํ๋ ์์ฑ.
0
: default, ์ ํ ํจ๊ณผ ์์.- ์๊ฐ: ์ง์์๊ฐ์
1s
์ ๊ฐ์ด ์ด ๋จ์๋ก ์ง์ .
div {
width: 100px;
height: 100px;
background-color: orange;
transition: 1s;
}
div:active {
width: 300px;
background-color: royalblue;
}
width, background-color ๋ชจ๋์ ์ ํ ํจ๊ณผ duration 1s
๊ฐ ์ ์ฉ๋์๋ค.
div {
width: 100px;
height: 100px;
background-color: orange;
transition: width 1s;
}
div:active {
width: 300px;
background-color: royalblue;
}
width ์๋ง ์ ํ ํจ๊ณผ duration 1s
๊ฐ ์ ์ฉ๋์๋ค.
div {
width: 100px;
height: 100px;
background-color: orange;
transition:
background-color 1s,
width 2s;
}
div:active {
width: 300px;
background-color: royalblue;
}
background-color ์๋ ์ ํ ํจ๊ณผ duration 1s
๊ฐ, width ์๋ ์ ํ ํจ๊ณผ duration 2s
๊ฐ ์ ์ฉ๋์๋ค.
3. transition-timing-function
์ ํ ํจ๊ณผ์ ํ์ด๋ฐ(Easing) ํจ์๋ฅผ ์ง์ ํ๋ ์์ฑ.
ease
: default, ๋๋ฆฌ๊ฒ - ๋น ๋ฅด๊ฒ - ๋๋ฆฌ๊ฒ =cubic-bezier(0.25, 0.1, 0.25, 1)
linear
: ์ผ์ ํ๊ฒ =cubic-bezier(0, 0, 1, 1)
ease-in
: ๋๋ฆฌ๊ฒ - ๋น ๋ฅด๊ฒ =cubic-bezier(0.42, 0.1, 1)
ease-out
: ๋น ๋ฅด๊ฒ - ๋๋ฆฌ๊ฒ =cubic-bezier(0, 0, 0.58, 1)
ease-in-out
: ๋๋ฆฌ๊ฒ - ๋น ๋ฅด๊ฒ - ๋๋ฆฌ๊ฒ =cubic-bezier(0.42, 0, 0.58, 1)
steps(n)
: n ๋ฒ ๋ถํ ๋ ์ ๋๋ฉ์ด์ .
div {
width: 100px;
height: 100px;
background-color: orange;
transition: 1s steps(10);
}
div:active {
width: 300px;
background-color: royalblue;
}
์ ํ ํจ๊ณผ easing ํจ์ steps(10)
๊ฐ ์ ์ฉ๋์ด 10๋จ๊ณ๋ก ๋๋์ด ์ ํ๋๋ค.
cubic-bezier(n, n, n, n)
์ ์ง์ ์ ์ํ ์๋ ์๋๋ฐ, ์ด๋ n ์ ๋ค์ด๊ฐ ์ซ์๊ฐ์ ์ง์ ๊ณ์ฐํ ํ์๋ ์๊ณ easings.net ์ ๋ฐฉ๋ฌธ์ ์ฌ์ ์ ์ ์๋ ๋ค์ํ ํจ์๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ฑฐ๋, cubic-bezier.com ์ฌ์ดํธ์ ์ ์ํด ๊ทธ๋ํ๋ฅผ ์ด์ฉํด ํจ์๋ฅผ ์ป์ ์ ์๋ค.
Easing Functions ์ ๋ํด์๋ GSAP - Easing ์ MDN - easing-function ์์ ์์ธํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
4. transition-delay
์ ํ ํจ๊ณผ๊ฐ ๋ช ์ด ๋ค์ ์์ํ ์ง ๋๊ธฐ์๊ฐ์ ์ง์ ํ๋ ์์ฑ.
0
: default, ๋๊ธฐ ์๊ฐ ์์.- ์๊ฐ: ๋๊ธฐ์๊ฐ์
1s
์ ๊ฐ์ด ์ด ๋จ์๋ก ์ง์ .
div {
width: 100px;
height: 100px;
background-color: orange;
transition: 1s;
}
div:hover {
width: 300px;
background-color: royalblue;
transition: 1s .5s;
}
hover ๊ฐ ์ ์ฉ๋ ๋๋ delay 0.5s
์ duration 1s
๊ฐ ์ ์ฉ๋๊ณ , ํด์ ๋ ๋๋ ๋๋ ์ด ์์ด duration 1s
๋ง ์ ์ฉ๋์ด ์ ํ๋๋ค.
8. Animation - Transform ๐ฉโ
1. Transform 2D
2D ์ ๋๋ฉ์ด์ ์ ์ง์ ํ๋ ์์ฑ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- translate(x, y): ์ด๋(X์ถ, Y์ถ)
- translateX(x): ์ด๋(X์ถ)
- translateY(y): ์ด๋(Y์ถ)
- scale(x, y): ํฌ๊ธฐ(X์ถ, Y์ถ)
- rotate(degree): ํ์ (๊ฐ๋), ํ์ ์ถ์ ์ ์ค์์ด๋ฉฐ,
transform-origin
์ ์ฌ์ฉํด ๋ณํํ ์ ์๋ค.- skewX(x): ๊ธฐ์ธ์(X์ถ)
- skewY(y)): ๊ธฐ์ธ์(Y์ถ)
์ ํจ์๋ค์ ๋ชจ๋ matrix(n, n, n, n, n, n)
์ด๋ผ๋ ํจ์๋ก ๋ณํ๋์ด ์คํ๋๋ค. ์ง์ matrix ํจ์๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ด๋ ต๋ค๋ณด๋
๋์จ ํจ์๋ค์ด๋ค.
2. Transform 3D
3D ์ ๋๋ฉ์ด์ ์ ์ง์ ํ๋ ์์ฑ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- perspective(n): ์๊ทผ๋ฒ(๊ฑฐ๋ฆฌ)
- rotateX(x): ํ์ (X์ถ)
- rotateY(y): ํ์ (Y์ถ)
๋จ์ถ ์์ฑ์ผ๋ก ์ ์์ ๋ฐ๋์
transform: perspective(500px) rotateX(45deg)
์ ๊ฐ์ด perspective ํจ์๊ฐ ์ฒซ ๋ฒ์งธ๋ก ์์ผ ํ๋ค.
2D ์ ๋๋ฉ์ด์
์์ ์์ฃผ ์ฌ์ฉ๋๋ ํจ์๋ค์ Z์ถ ๋ฒ์ translateZ(z)
, translate3d(x, y, z)
, scaleZ(z)
,
scale3d(x, y, z)
, rotateZ(z)
, rotate3d(x, y, z, a)
๊ฐ ์กด์ฌํ๋ค. ํ์ง๋ง ์ค์ ๋ก Z์ถ์ ์ปจํธ๋กค์ ์ ์ฌ์ฉํ์ง ์๋๋ค.
perspective(n) ์ผ๋ก ์๊ทผ๋ฒ์ ์ฃผ๋ฉฐ X์ถ๊ณผ Y์ถ์ ํ์ ์ํค๋ ์ ๋๋ก ์ฌ์ฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ ํจ์๋ค์ ๋ชจ๋ matrix3d
ํจ์๋ก ๋ณํ๋์ด ์คํ๋๋๋ฐ, 2D์์๋ 6๊ฐ์๋ ํ๋ผ๋ฏธํฐ๊ฐ 3D์์๋ 16๊ฐ๋ก ๋์ด๋๋ค. ๋ฐ๋ผ์ ์ง์
matrix ํจ์๋ฅผ ์์ฑํด ์ฌ์ฉํ ์ผ์ ์๋ค๊ณ ๋ด๋ ๋๋ค.
3. Perspective Attributes and Functions
perspective ๋ ์์ฑ๊ณผ ํจ์ ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. ๋์ ๋จ์ํ ๋จ์ถ ์์ฑ์ ๊ด๊ณ๊ฐ ์๋๋ผ ๊ด์ธก ์ง์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฒฐ๊ณผ๋ฌผ ์์ฒด๊ฐ ๋ค๋ฅด๋ค. ์์ฑ์ผ๋ก ์ฌ์ฉ์ transform ์ ์ ์ฉํ๋ ค๋ ๋์์ ๋ถ๋ชจ์ ์์ฑ๊ฐ์ ์ฃผ์ด์ผํ๊ณ , ํจ์๋ก ์ฌ์ฉ์ transform ์ ์ ์ฉํ๋ ค๋ ๋์์๊ฒ ์ฃผ์ด์ผํ๋ค.
Type | Syntax | Apply Target | Change Observing Point |
---|---|---|---|
Perspective Attributes | perspective: 600px | Parent | perspective-origin |
Perspective Functions | transform: perspective(600px) | Self | transform-origin |
- Perspective Attributes
<section>
<div></div>
<div></div>
<div></div>
<div></div>
</section>
section {
width: 400px;
height: 100px;
border: 1px solid #000;
background-color: #90acfa;
perspective: 200px;
display: flex;
div {
box-sizing: border-box;
width: 100px;
height: 100px;
&:nth-of-type(1) {
background-color: #ffa500cc;
transform: rotateY(45deg);
}
&:not(:nth-of-type(1)) {
border: 1px dashed red;
}
}
}
๋ถ๋ชจ(ํ๋์ ์ปจํ ์ด๋)์ ์ค์ฌ์ด origin(๊ด์ธก ์ง์ ) ์ด๊ณ , ์ด ์ง์ ์์ 200px ๋จ์ด์ง ์ง์ ์์ ๊ด์ฐฐํ๋ค.
- Perspective Functions
section {
width: 400px;
height: 100px;
border: 1px solid #000;
background-color: #90acfa;
display: flex;
div {
box-sizing: border-box;
width: 100px;
height: 100px;
&:nth-of-type(1) {
background-color: #ffa500cc;
transform: perspective(200px) rotateY(45deg);
}
&:not(:nth-of-type(1)) {
border: 1px dashed red;
}
}
}
์๋ฆฌ๋จผํธ(๋ ธ๋์ ๋ฉด)์ ์ค์ฌ์ด origin(๊ด์ธก ์ง์ ) ์ด๊ณ , ์ด ์ง์ ์์ 200px ๋จ์ด์ง ์ง์ ์์ ๊ด์ฐฐํ๋ค.
4. backface-visibility
3D ๋ณํ์ผ๋ก ํ์ ๋ ์๋ฆฌ๋จผํธ์ ๋ท๋ฉด ์จ๊น ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ ์์ฑ.
visible
: default, ๋ท๋ฉด ๋ณด์.hidden
: ๋ท๋ฉด ์จ๊น(0~360๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด,0...<90: ๋ณด์
,90...270: ์จ๊น
,271...360: ๋ณด์
์ ํจํด์ด ์ฐ์๋๋ค).
Reference
- ๋ฐ์์ , โํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ์ ๋ชจ๋ ๊ฒ ์ด๊ฒฉ์ฐจ ํจํค์ง Online.โ fastcampus.co.kr. last modified unknown, Fast Campus.