์๊ตฌ์ฌํญ
๋์ ์ผ๋ก li
์์์ ๊ฐ์๊ฐ ๋ฐ๋๋ ๋ชฉ๋ก์ด ์กด์ฌํ๋ค. ์ด ๋ชฉ๋ก์ ์ต๋ 4๊ฐ์ li
์์๋ฅผ ๊ฐ์ง ์ ์๋ค๊ณ ๊ฐ์ ํ ๋, ์๋์ ์์ ์ด๋ฏธ์ง์ฒ๋ผ li
๊ฐ 4๊ฐ์ผ ๋๋ง ๋ถ๋ชจ ์์์ ๊ฝ์ฐจ๊ฒ ์คํ์ผ๋ง ํ๋ ค๊ณ ํ๋ค.
์ด๋ป๊ฒํ๋ฉด JavaScript ์ฝ๋ ์์ด CSS๋ง์ผ๋ก li
๊ฐ 4๊ฐ์ผ ๋๋ฅผ ํ์ธํ๊ณ ๋ค๋ฅธ ์คํ์ผ๋ง์ ์ ์ฉํ ์ ์์๊น?
๊ธฐ๋ณธ UI ์ฝ๋
<!-- html -->
<ul class="list">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
/* CSS */
html,
body {
height: 100%;
}
ul {
margin: 0;
padding: 0;
list-style: none;
}
.list {
display: flex;
flex-direction: column;
height: 30em;
border: 5px solid;
}
.item {
height: 20%;
margin-bottom: 0.3em;
background-color: wheat;
}
๊ตฌํ
๊ฐ์ ํด๋์ค :nth-last-child()
์ ์ ํ์ ~
๋ฅผ ์์ฉํ๋ฉด CSS๋ง์ผ๋ก ๊ฐ๋จํ ๊ตฌํํ ์ ์๋ค.
๊ธ์ ๋ค ์์ฑํ๊ณ ๋์์ผ Grid ๋ ์ด์์์ ์ฌ์ฉํ๋ ๊ฒ ๋ ๋ชจ๋ํ๊ณ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ผ ์ ์๊ฒ ๋จ ์๊ฐ์ด ๋ค์๋ค...
.item:nth-last-child(n + 4),
.item:nth-last-child(n + 4) ~ .item {
flex: 1;
margin-bottom: 0;
background-color: aliceblue;
}
.item:nth-last-child(n + 4) ~ .item {
border-top: 1px solid;
}
์์ ์ ํ์๋ฅผ ํด์ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
.item:nth-last-child(n + 4)
๋ง์ง๋ง์์๋ถํฐ 4๋ฒ์งธ ์ฆ, ์ฌ๊ธฐ์๋ ๋ชฉ๋ก ์ค ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ์ ์๋ .item
์์๋ฅผ ์ ํํ๋ค.
.item:nth-last-child(n + 4) ~ .item
~
๋ ์ผ๋ฐ ํ์ ์ ํ์๋ก A ~ B
ํจํด์ผ ๋, A
์์ ๋ค์ ๋ฐ๋ผ์ค๋ ๋ชจ๋ ํ์ B
์์๋ฅผ ์ ํํ๋ค. ๋ฐ๋ผ์ ๋ชฉ๋ก ์ค ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ์ ์๋ .item
์์๋ฅผ ๋ค๋ฐ๋ฅด๋ 2 ~ 4๋ฒ์งธ ํ์ .item
์์๋ค์ ์ ํํ๊ฒ ๋๋ค.
๊ทธ๋์ ์ต์ข
์ ์ผ๋ก .item
์์๊ฐ 4๊ฐ์ผ ๋ ์ ๋ถ ์ ํ๋๊ณ , flex: 1;
์ ์์ฑ์ ์ํด ๋ถ๋ชจ ์์ญ์ ๋์ผํ ๋น์จ๋ก ๊ฝ ์ฑ์ฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด :nth-last-child()
๊ฐ ์ด๋ป๊ฒ ๋์ํ๊ธธ๋ ์ด๊ฒ ๊ฐ๋ฅํ ๊ฑธ๊น?
:nth-last-child()
:nth-last-child()
๋ ํ์ ์์๋ค ์ค ๋งจ ๋ง์ง๋ง๋ถํฐ ์ธ์ด์ ํน์ ์์น์ ์์๋ฅผ ๋งค์นญํ๋ CSS์ ๊ฐ์ ํด๋์ค์ด๋ค. ์ธ์๋ก ์ซ์ ํน์ ํํ์์ ์ ๋ฌํ์ฌ ๋งค์นญ ํจํด์ ์ง์ ํ ์ ์๋ค. ์ด ๋, ํํ์์์์ n
์ 0 ํน์ ์์๋ฅผ ์๋ฏธํ๋ค.
์์
li:nth-last-child(2)
๋ง์ง๋ง์์๋ถํฐ 2๋ฒ์งธ li
์์๋ฅผ ๋ํ๋ธ๋ค.
li:nth-last-child(2n)
ํน์ li:nth-last-child(even)
๋ง์ง๋ง์์๋ถํฐ 2, 4, 6, ..., ์ง์๋ฒ์งธ์ li
์์๋ฅผ ๋ํ๋ธ๋ค.
li:nth-last-child(2n + 1)
ํน์ li:nth-last-child(odd)
๋ง์ง๋ง์์๋ถํฐ 1, 3, 5, ..., ํ์๋ฒ์งธ์ li
์์๋ฅผ ๋ํ๋ธ๋ค.
li:nth-last-child(n)
ํน์ li:nth-last-child(n + 1)
๋ชจ๋ li
์์๋ฅผ ๋ํ๋ธ๋ค. n
์ด 0๋ถํฐ ์์ํ๊ณ :nth-last-child()
๋ ๋งจ ์๋์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ์นด์ดํ
์ ํ๊ธฐ ๋๋ฌธ์, n
๊ณผ n + 1
์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ ๋จ์ํ li
์ ํ์์๋ ๋์ผํ ๊ฒฐ๊ณผ์ด๋ค.
li:nth-last-child(1)
ํน์ li:nth-last-child(0n + 1)
๋ง์ง๋ง์์๋ถํฐ 1๋ฒ์งธ li
์์๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ :last-child
์ ํ์์ ๋์ผํ ๊ฒฐ๊ณผ์ด๋ค.
li:nth-last-child(-n + 4)
๋ง์ง๋ง์์๋ถํฐ 4๋ฒ์งธ๊น์ง์ li
์์๋ฅผ ๋ํ๋ธ๋ค. li
์ ์ด ๊ฐ์๊ฐ 4๊ฐ ์ดํ๋ผ๋ฉด, ๋ชจ๋ li
์์๋ค์ ์ ํํ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
li:nth-last-child(n + 4)
๋ง์ง๋ง์์๋ถํฐ 4๋ฒ์งธ ์์์์ ์์ํด ๋ชฉ๋ก์ ์์์ ์ฒซ ๋ฒ์งธ ์์๊น์ง ์ ๋ถ ์ ํํ๋ค.
๋ค์ ๊ฒฐ๋ก
์ด๋ฒ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๊ธฐ ์ํด์ ํ๋์ ์กฐ๊ฑด์ด ์์ด์ผ ํ๋ค. ๋ฐ๋ก ํน์ CSS๋ฅผ ์ ์ฉํ๊ณ ์ถ์ ์์์ ๊ฐ์๋ฅผ ๋ช ํํ ์๊ณ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ผ ์ด๋ฐ ์์ฉ๋ ๊ฐ๋ฅํด์ง๋ค.
ํ์ ์์๊ฐ x๊ฐ ์ด์์ผ ๋ ์ ์ฒด ์ ํ
li:nth-last-child(n + x),
li:nth-last-child(n + x) ~ li {
}
ํ์ ์์๊ฐ x๊ฐ ์ดํ์ผ ๋ ์ ์ฒด ์ ํ
li:nth-last-child(-n + x) {
}
/* ํน์ */
li:nth-last-child(-n + x):first-child,
li:nth-last-child(-n + x):first-child ~ li {
}
'๐ป๐ > ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] JavaScript์์ CSS ๋ณ์ ๊ฐ ์ฌ์ฉํ๊ธฐ (0) | 2021.10.24 |
---|---|
ํด๋ฆฌํ(Polyfill)์ด๋ (0) | 2021.09.26 |
[React] Invalid Hook Call Warning(ํด๋์ค ์ปดํฌ๋ํธ์์ Hook ์ฌ์ฉํ๊ธฐ) (0) | 2021.09.19 |
[React] ์ฑ๋ฅ ์ต์ ํ:: React.memo๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ Memoization (0) | 2021.09.15 |
[Redux-Saga] Error: call: argument of type {context, fn} has undefined or null fn (0) | 2021.09.12 |