CSS μ νμλ‘ μ¬μ©ν μ μλ κ² μ€μ μ΄λ€ νκ·Έκ° μ΄λ€ μμ± λλ μμ± κ°μ κ°μ§κ³ μμλ νΉμ νλ λ°©λ²μ΄λ€.
input[placeholder='userID'] { display: none; }
<input type='text' placeholder='userID' /> <!-- μ΄κ²λ§ μΆλ ₯λμ§ μλλ€. --> <input type='text' placeholder='type content' />
μ μ½λμμ input[placeholder='userID']
λμ input[placeholder]
κ° λ€μ΄κ°λ€λ©΄ λ λ€ μΆλ ₯λμ§ μμμ κ²μ΄λ€.
:nth-child()
ꡬ쑰 μ νμλ νμ μλ¦¬λ¨ΌνΈ μ€ κ°μ₯ 첫λ²μ§Έ μ리먼νΈλ₯Ό μ ννλ μ νμμ΄λ€.
μ£Όμν΄μΌν μ μ λͺ¨λ ꡬ쑰 μ νμλ νκ·Έκ° λ€λ₯΄λλΌλ νμ μ리먼νΈλΌλ©΄ μκ΄νμ§ μκ³ μΈμ ν΄λΉνλ μ리먼νΈλ₯Ό λ°ννλ€λ μ μ΄λ€.
μ΄μ λ°ν΄ :nth-of-type()
νν ꡬ쑰 μ νμ κ°μ κ²½μ°μλ λκ°μ νκ·Έλ₯Ό κ°μ§ νμ μ리먼νΈμ€μμ 첫λ²μ§Έ μ리먼νΈλ₯Ό λ°ννλ€.
div:nth-child(3) { color: red; } div:nth-of-type(3) { color: blue; }
<body> <div>Division 1</div> <span>Span 1</span> <div>Division 2</div> <!--κΈμμμ΄ λΉ¨κ°μμΌλ‘ λ³νλ€.--> <span>Span 2</span> <div>Division 3</div> <!--κΈμμμ΄ νλμμΌλ‘ λ³νλ€.--> </body>
λ€λ§ μ΄ κ΅¬μ‘° μ νμμ νν ꡬ쑰 μ νμλ₯Ό μ¬μ©ν λ μ£Όμν μ μ΄ μλ€.
μλ₯Ό λ€μ΄ div:first-child
λ₯Ό νμλ κ·Έ div
μ리먼νΈμ νμ μ리먼νΈκ° μλ€λ©΄ λͺ¨λ νμ μ리먼νΈμ div:first-child
λ‘ μ€μ ν μ€νμΌμ΄ μ μ©λλ€.
div:first-child { color: red; }
<body> <div> <div>Check 1 <!--κΈμμμ΄ λΉ¨κ°μμΌλ‘ λ³νλ€.--> <p>Content 1</p> <!--κΈμμμ΄ λΉ¨κ°μμΌλ‘ λ³νλ€.--> <div>Content 2</div> <!--κΈμμμ΄ λΉ¨κ°μμΌλ‘ λ³νλ€.--> </div> </div> <div>Division 2</div> <div>Division 3</div> </body>
μΈμ μ리μ μμ±, μμ±κ³Ό κ°, class, ID, ꡬ쑰 μ νμ λ±λ±μ λ£μ΄ ν΄λΉ μμ±μ κ°μ§ μ리먼νΈλ μ μΈνκ³ μ νν μ μκ² λμμ£Όλ μ νμμ΄λ€.
li:not(:nth-child(2n)) { background-color: red; }
<ul> <li>list 1</li> <!--λ°°κ²½μμ΄ λΉ¨κ°μμΌλ‘ λ³νλ€.--> <li>list 2</li> <li>list 3</li> <!--λ°°κ²½μμ΄ λΉ¨κ°μμΌλ‘ λ³νλ€.--> <li>list 4</li> </ul>
μ΄μ²λΌ λΆμ μ νμμ μ°μ°μμ ꡬ쑰 μ νμλ λ€μ΄κ° μ μμΌλ©° μ¬μ©λ²μ 무κΆλ¬΄μ§νλ€.
λ μ΄μμμ ꡬμ±ν λ, HTML ꡬμ±μ ν¬κ² μμ§λΆν κ³Ό μνλΆν λ‘ λΆλ₯ ν μ μλ€.
μμ§λΆν μ νλ©΄μ μμ§μΌλ‘ ꡬλΆνμ¬ μ»¨ν μΈ λ₯Ό κ°λ‘λ‘ λ°°μΉνλ κ²μ΄κ³ , (ν, row)
μνλΆν μ λΆν λ μμλ₯Ό μνμΌλ‘ ꡬλΆνμ¬ λ΄λΆ 컨ν μΈ λ₯Ό μΈλ‘λ‘ λ°°μΉνλ€. (μ΄, column)
μμ§λΆν ? μμ§μΌλ‘ λΆν νλλ° μ νμ΄κ³ μ κ°λ‘λ°°μΉμΌ? λΌκ³ μκ°ν μ μλλ°, λ΄κ° κ·Έλ¬λ€
μ½κ² μκ°ν΄μ μ μ¬κ°νμ΄ μλ€κ³ κ°μ νμ.
μ΄ μ μ¬κ°νμ μμ§μΌλ‘ λλ² μλ₯΄λ©΄(μμ§λΆν ) μ μ¬κ°νμ κ²°κ΅ κ°λ‘λ‘ μΈκ°μ μ§μ¬κ°νμ΄ λμ¬ κ² μ΄λ€.
μμ μ΄ μ μ¬κ°νμ μνμΌλ‘ λλ² μλ₯΄λ©΄(μνλΆν ) μ μ¬κ°νμ μΈλ‘λ‘ μΈκ°μ μ§μ¬κ°νμ΄ λμ¬ κ² μ΄λ€.
μ΄λλ μ΄ν΄κ° μ΄λ ΅λ€λ©΄ κ·Έλ₯ 머리μ λ°μ.
μμ§λΆν - ν - row
μνλΆν - μ΄ - column
Flexboxλ λͺ¨λ μΉμ μν λΉκ΅μ μ΅μ μ λ μ΄μμ λ°©μμ΄λ©°, μΉμ΄ λ΄κ³ μλ 컨ν
μΈ μμμ μ¬μ΄μ¦κ° λΆλͺ
ννλλΌλ μ λμ μΌλ‘ μ‘°μ ν΄ μ μ°νκ² λ μ΄μμμ ꡬμ±ν μ μλ€.
κ²λ€κ° λΉκ΅μ κ°νΈν λ°©μμΌλ‘ λ μ΄μμμ ꡬμ±ν μ μλ€λ μ₯μ λ κ°μ§κ³ μλ€.
Flexboxλ λΆλͺ¨μμμ μμμμκ° μ’ μμ΄ λμ΄ μλκ² ν° νΉμ§μΈλ°, λ μ΄μμμ λ°°μΉν λ λ°°μΉκ° λ μμμ μ νν΄ μ€μ νλκ² μλ λΆλͺ¨λ₯Ό μ νν΄ μ€μ νκ³ μμ κ°μ ν¬κΈ° μ‘°μ λ§μ μμλ₯Ό μ νν΄ μ€μ νκ² λλ€.
#outer { display: flex; flex-direction: row; /* νμ νκ² μ§λ§ flex-direction μμ±μ κΈ°λ³Έ κ°μ΄ rowμ΄κΈ°μ μμ¨λ λλ€. */ } .box { box-sizing: border-box; height: 25px; width: 25px; margin: 0.2rem; background-color: lightblue; }
<ul id='outer'> <li class='box'>box</li> <li class='box'>box</li> <li class='box'>box</li> <li class='box'>box</li> </ul>
μλλΌλ©΄ μΈλ‘λ‘ νλμ© μμ λ°μ€κ° display: flex
λ₯Ό μ μ©νκ³ λλ κ°λ‘λ‘ μ λ ¬λ κ²μ λ³Ό μ μμ κ²μ΄λ€.
λ€λ§ flex
λ λΆλͺ¨μ μ μ©νλ€ νλλΌλ μμμ μμ, μ¦ μμμ μ μΈν νμκΉμ§λ μ μ©λμ§ μμΌλ μμμ μμμ κ°λ‘ μ λ ¬ μμΌμΌν λλ μμμκ² display: flex
μμ±μ λΆμ¬νλ€.
flex-direction
μμ± κ°μ κ²½μ°λ λΆλͺ¨μ μ μ©μν€λ μμ±μΌλ‘, μμμ κ°λ‘λ‘ μ€μΈμΈμ§ μΈλ‘λ‘ μ€μΈμΈμ§ μ νλ μμ±μ΄λ€.
row
λ κΈ°λ³Έ κ°μΌλ‘ flexboxμμ flex-direction
μμ±μ λΆμ¬νμ§ μμΌλ©΄ μμλ€μ κ°λ‘λ‘ μ λ ¬λλ€.
column
λ μΈλ‘ μ λ ¬μΌλ‘ μμμκ² λΆμ¬νλ flex μμ±μΌλ‘ λ μ΄μμμ μ‘κ³ μΆμλ μ¬μ©νλ€.
μ¬κΈ°μ μλ‘κ² λ±μ₯νλ flexboxμ κ°λ
μ΄ axis
(μΆ)μ΄λ€.
axis
λ main axis(κΈ°μ€μΆ)
κ³Ό cross axis(κ΅μ°¨μΆ)
μΌλ‘ λλλλ° flex-direction
μμ±μ΄ μ§μ νλ κ²μ΄ λ°λ‘ μ΄ axis
μ΄λ€.
flex-directon: row;
μμ± κ°μ μ¬μ©νκ² λλ©΄ κΈ°μ€μΆμ΄ row(ν)λ°©ν₯, κ΅μ°¨μΆμ΄ column(μ΄)λ°©ν₯μΌλ‘ λ°λκ³ μ»¨ν
μΈ (μμμμ)λ κΈ°μ€μΆμ λ°λΌ μ λ ¬ λλ κ²μ΄λ€.
μ΄μ λ°λλ‘ flex-direction: column;
μμ± κ°μ μ¬μ©νκ² λλ©΄ κΈ°μ€μΆμ΄ column(μ΄)λ°©ν₯, κ΅μ°¨μΆμ΄ row(ν)λ°©ν₯μ΄ λλ κ²μ΄κ³ κΈ°μ€μΆμΈ μ΄λ°©ν₯(μΈλ‘)μ λ°λΌ 컨ν
μΈ κ° μ λ ¬λλ μλ¦¬μΈ κ².
μ΄ μΆμλ μμμ κ³Ό λμ λ μ‘΄μ¬νλλ°,
ν΅μμ μΌλ‘ λΆλͺ¨μμμ μ’μΈ‘μ΄ μμμ , μ°μΈ‘μ΄ λμ μ΄κ±°λ μκ° μμμ μλκ° λμ μ΄λ€.
λ€λ§ row
μ column
μμ reverse-
λ₯Ό λΆμ΄λ©΄ μ΄ μμμ κ³Ό λμ μ΄ λ°μ λκ³ μμμμμ μ λ ¬ μμ μμμΌλ‘ μ λ ¬λλ€.
νμ νκ² μ§λ§ μ΄ μΆ λ°©ν₯μ λ°λΌ μμμ μ λ ¬μν€λ μμ±λ μ‘΄μ¬νλ€.
μμ μκ°νλ display: flex;
, flex-direction: column;
λ±μ μμ±μ λΆλͺ¨μ λΆμ¬νλ μμ±μ΄μμ§λ§ μ΄ flex
μμ±μ μμμκ² λΆμ¬νλ μμ±μ΄λ€.
λ¬Έλ²μ λ€μκ³Ό κ°λ€.
flex: grow shrink basis;
grow
λ μμ΄ν
λ€μ basisλ₯Ό μ μΈν μ¬λ°± λΆλΈμ growμ μ§μ λ μ«μμ λΉμ¨λ‘ λλμ΄ κ°μ§λ€.
μ¦, μΌλ§λ λ릴 κ²μΈκ°λ₯Ό μ μνλ€.
shrink
λ μ½κ² growμ λ°λμΈλ°, basis κ°μμ μΌλ§λ μ€μΌ κ²μΈμ§λ₯Ό μ μνκ³ ,
basis
λ μμμμμ κΈ°λ³Έ ν¬κΈ°λΌκ³ ν μ μλ€.
μ°¨λ‘λλ‘ μ΄ν΄λ³΄μ.
λΆλͺ¨ λ° μμμ΄ nκ° μμλ κ° μμμ΄ κ°μ§ grow κ°μ μ΄ν©μ΄ nμ΄λΌλ©΄ grow μμ±μ 1λ‘ μ§μ νλ κ²μ κ°λ‘(κΈ°μ€μΆ rowμΌλ) λλ μΈλ‘(κΈ°μ€μΆ columnμΌλ)λ₯Ό 1/nμΌλ‘ μ§μ νλ€λ λ»μ΄ λλ€.
#outer { display: flex; flex-direction: row; } .box { box-sizing: border-box; height: 25px; margin: 0.2rem; background-color: lightblue; flex: 1 0 0; } .box:nth-child(2n) { flex: 2 0 0; }
<ul id='outer'> <li class='box'>1</li> <li class='box'>2</li> <li class='box'>3</li> <li class='box'>4</li> </ul>
μ΄λ° μ½λκ° μμλ 2λ²κ³Ό 4λ² λ°μ€μ κ°λ‘ κΈΈμ΄λ 1λ²κ³Ό 3λ² λ°μ€μ κ°λ‘ κΈΈμ΄μ λλ°°κ° λλ€λ λ»μ΄λ€.
shrink
λ growμ λ°λλ‘ μΌλ§λ μ€μ΄λ€μ§ μ νλ μμ±μΌλ‘ μ€μ ν λΉμ¨λ§νΌ λ°μ€κ° μ€μ΄λ λ€.
κ³ λ‘ grow
μ shrink
λ₯Ό κ°μ΄ μ°λ κ²μ κΆμ₯λμ§ μμΌλ©°, λΉμ¨λ‘ λ μ΄μμμ μ ν κ²½μ°μλ flex-grow
μμ±μ μ΄μ©νκ±°λ flex: grow 1 auto;
λ₯Ό μ΄μ©ν΄ grow μμ± λ§μ λ³κ²½νλ νΈμ΄ μ’μλ°,
μ΄λ shrink
λ basis
μμ±μ λ°λ₯Έ λΉμ¨μ΄κΈ°μ κ²°κ³Ό κ° μμΈ‘μ΄ μ΄λ ΅κΈ° λλ¬Έμ΄λ€.
flex
μ κΈ°λ³Έ κ°μ΄ flex: 0 1 auto;
μ΄λ―λ‘ grow κ°μ μμ ν λ shrink κ°μ΄ 1λ‘ μμ΄λ 무방νλ€.
basis
μμ±μ grow
μμ±μ΄λ shrink
μμ±μΌλ‘ μ§μ§κ³ λ³ΆκΈ° μ κΈ°λ³Έ μμμμμ λ°μ€ ν¬κΈ°μ΄λ€.
flex-grow
μμ± κ°μ 0
μΌλ‘ μ§μ νμλ basis
κ°μ μ§μ νλ©΄ basis
κ°μ ν¬κΈ°λ‘ μ μ§λλ€.
μμμμμ width
μμ±μ΄ μ¬μ©λ λκ° μλλ° μ΄λλ basis
μμ±μ΄ λ¨Όμ μ μ©λλ€.
μμ λ΄ μ»¨ν
μΈ λμ΄ λ무 λ§μ 컨ν
μΈ κ° λμΉ λ width
λ‘ μ§μ νλ€λ©΄ ν¬κΈ°κ° λ³ν μ μμΌλ κ·Έλλ width-max
λ₯Ό μ΄μ©νλ νΈμ΄ μ’λ€. λ¬Όλ‘ μ΄λλ flex-basis
μμ±μ΄ λΆμ¬λμ§ μμμΌ νλ€!
μ¬κΈ°μ λλμ΄ μμ νμλ μΆ λ°©ν₯μ λ°λ₯Έ 컨ν
μΈ μ λ ¬ λ°©λ²μ΄ λμ¨λ€.
λ°λ‘ justify-content
μμ±κ³Ό align-items
μμ±μ΄λ€.
justify-content
μμ± κ°μ κ²½μ°μλ main axis
(κΈ°μ€μΆ)μ κΈ°μ€μΌλ‘ μ λ ¬μν€λ μμ±μ΄λ€.
μμ£Ό μ¬μ©νλ κ°μΌλ‘λ
flex-start
: λν΄νΈ κ°μΌλ‘ κΈ°μ€μΆμ μμμ λΆν° μμλ€μ λ± λΆμ¬ μ λ ¬μν¨λ€.
flex-end
: κΈ°μ€μΆμ λμ λΆν° μμλ€μ λ± λΆμ¬ μ λ ¬μν¨λ€.
center
: κΈ°μ€μΆμ μμμ κ³Ό λμ μ¬μ΄ μ€κ°μ μμλ€μ λ± λΆμ¬ μ λ ¬μν¨λ€.
space-between
: μμμ λΆν° λμ κΉμ§ μ λ ¬μν€λ, μμλ€ μ¬μ΄ λͺ¨λ κ°κ²©μ λκ°μ΄ λλ€.
space-around
: μμμ λΆν° λμ κΉμ§ μ λ ¬μν€λ, μμλ€μ΄ λκ°μ margin κ°μ κ°μ§κ² μ λ ¬μν¨λ€.
λ±μ΄ μλ€.
align-items
μμ± κ°μ κ²½μ°μλ cross axis
(κ΅μ°¨μΆ)μ κΈ°μ€μΌλ‘ μ λ ¬μν€λ μμ±μ΄λ€.
μμ£Ό μ¬μ©νλ κ°μΌλ‘λ
stretch
: λν΄νΈ κ°μΌλ‘ κ΅μ°¨μΆμ μμμ λΆν° λμ κΉμ§ μμμ heightλ₯Ό λλ¦°λ€.
flex-start
: κ΅μ°¨μΆμ μμμ μ μμλ€μ λ± λΆμ¬ μ λ ¬μν¨λ€.
flex-end
: κ΅μ°¨μΆμ λμ μ μμλ€μ λ± λΆμ¬ μ λ ¬μν¨λ€.
center
: κ΅μ°¨μΆμ μμμ κ³Ό λμ μ¬μ΄μ μμλ€μ λ± λΆμ¬ μ λ ¬μν¨λ€.
baseline
: μμμ λ¬Έμμ΄ μ»¨ν
μΈ λ°μ€μ λ§μΆ° μ λ ¬μν¨λ€.
λ±μ΄ μλ€.
CSSμ HTMLμ μ΄μ©ν΄ λ μ΄μμ μ§λλ° λ³΄λ€ λ₯μν΄μ‘λ€.
flexboxμ μ¬μ©λ²μ μ΅νλ€.μλ ¨ν΄μΌν¨
CSSμ λ무 μννμλ€λκ±Έ λκΌλ€.
κ·Έλμ κ·Έκ±Έ μ§μ€ν΄μ λ³Έλ€κ³ μ€λ λ€λ₯Έ 곡λΆλ₯Ό νλλ λͺ»νλ€.
λ°°μ΄μ thisArg 보긴 νλλ° μ 리λ₯Ό λͺ»νλ€.
μ μ€λμ λ무 νΌκ³€ν ν루μλ€.
CSSμ λ무 λ―Έν‘ν λλ¨Έμ§ κ³΅λΆν κ² λ무 λ§μλ€.
κ·Έλλ μ λΆν° μκ°νλ flexbox μ΄μ©λ²μ μ΅νμ κΈ°λΆμ΄ μ’λ€.
float λ°©μμ μ¬μ©ν΄λ΄€μλλ° κ·Έ λ°©μλ³΄λ€ μ΄κ² λ μ§κ΄μ μ΄λ©° μ¬μ΄ κ² κ°λ€.
μ΄μ λ λΈλ‘κΉ νκ³ λ λ΄μ§νλ€κ³ λ¦κ² μ€λ€κ° μμΉ¨ μ΄λ λͺ»κ°λλ° μ€λμ λ°λ‘ κΈ°μ νκ³ μμΉ¨μ΄λ κΌ κ°μΌμ§
νλ‘νΌ ν
ν¬λ, flexbox - https://heropy.blog/
https://www.w3schools.com/
https://developer.mozilla.org/