ํ๋ก์ ํธ ์งํํ๋ฉด์ ๋ฒํผ ๋นํ์ฑํ ์ css๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ํ๋ ค๊ณ ์ถ๊ฐํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง ๊ธฐ์กด์ ๋ฐฉ์์ผ๋ก ์ ์ฉํ๋๊น ์ ๋๋ก ์๋์ด ์ํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด css์ ํ์์ ๊ฒฐํฉ์์ ์ดํด๋ฅผ ๋์ด๊ธฐ ์ํด ๊ธ์ ์ ๋ฆฌํ๊ธฐ๋ก ํ๋ค.
// ๊ธฐ๋ณธ
๐ Type Selector ํ๊ทธ ์์ฒด๋ฅผ ์ ํ
p { }
๐ Class Selector : ์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ํ
.title { }
๐ ID Selector : #์ผ๋ก ์ ํ
#title { }
๐ Attribute Selector : ์์ฑ์ ๊ฐ์ง ๋ชจ๋ ํ๊ทธ๋ฅผ ์ ํ
a[taeget] { }
input[type="text"] { }
๐ Pseudo Class : ํน์ ์ํ์ ์ ์ฉ
a:hover { }
li:nth-child(odd) { }
๐ Child Combinator : ์ง์์์์ > ๋ก ์ ํ
parent > child { }
๐ Descendant Combinator : ํ์์ ์ ํ
ancestor descendant { }
๐ CSS Nesting
nav
&. light - ๊ฐ์ ํ์ ์ ํ
> li - ์์ ์ ํ
&: - ๊ฐ์ ํ์ + Pseudo
ํ๊ทธ ์์ฒด๋ฅผ ์ ํํด์ HTML๋ฌธ์ ๋ด ๋ชจ๋ ๊ฐ์ ํ๊ทธ์ ์ ์ฉ์ํค๋ ๋ฐฉ์์
๋๋ค.
p {
color : red
}
strong {
font-weight: 500
}
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ ํ๊ธฐ๋ก ๋์์ ์ ๊ทผํ๋ ๋ฐฉ์์ ๋๋ค.
.error {
color: red;
}
Dom์์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค
#title {
color: red;
}
(= ์์ฑ ์ ํ์)
ํ๊ทธ ๋ค์ [ ] ์์๋ค๊ฐ ์์ฑ ๊ฐ์ ์ ๋ ฅํด์ ์ฌ์ธํ ์คํ์ผ์ ํ ์ ์์ต๋๋ค.
[] ์์ ์์ฑ๋ช
๋ง ์
๋ ฅ ์, ํด๋น ์์ฑ์ด ์๋ ๋ชจ๋ ์์๋ฅผ ์ ํํฉ๋๋ค.
a[target] {
color : red
}
[] ์์ ์์ฑ๊ฐ๋ ์
๋ ฅ ์, ์์ฑ๋ช
๊ณผ ์์ฑ๊ฐ์ด ์ ํํ ์ผ์นํ๋ ๋ชจ๋ ์์๋ฅผ ์ ํํฉ๋๋ค
ํ์
์ด ๋ฆฌ์
์ธ ๋ชจ๋ ๋ฒํผ์ ์ ํํ๋ ์์ ์
๋๋ค
input[type="text"] {
background-color: yellow;
}
<a>ํ๊ทธ์ ๊ฒฝ์ฐ ๋ค์ํ ์ํ๊ฐ ์์ต๋๋ค.
๊ฐ๊ฐ์ ์ํ์ css๋ฅผ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด, Pseudo Class(๊ฐ์ ํด๋์ค)๋ฅผ ์ ์ฉํ๋๊ฒ ๋ฐ๋์งํฉ๋๋ค.
์ํ๋ก๋ hover visited focus ๋ฑ ์ด ์์ต๋๋ค
// ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ์ ์ฉ๋ฉ๋๋ค
a:hover {
color: red;
}
// ์
๋ ฅํ๋์ ํฌ์ปค์ค๊ฐ ๊ฐ๋ฉด ์ ์ฉ๋ฉ๋๋ค.
input:focus {
border-color: blue;
}
์์์์๋ฅผ ์ ํํด์ ์ฌ์ฉ๋ ๊ฐ๋ฅํฉ๋๋ค
// ํ์ ๋ฒ์งธ li์ ์ ์ฉ๋ฉ๋๋ค
li:nth-child(odd) {
background-color: lightgray;
}
// ์ฒซ๋ฒ์งธ ์์(๋ชจ๋ p)์ ์ ์ฉ๋ฉ๋๋ค
p:first-child {
font-weight: bold;
}
// ๋ง์ง๋ง ์์(๋ชจ๋ p)์ ์ ์ฉ๋ฉ๋๋ค
p:last-child {
font-style: italic;
}
๋ฒํผ์์ ์์ฒญ ๋ง์ด ์ฐ์ด๋ disabled ๋ ์๋ ํด๋์ค์
๋๋ค.
์๋ ์์๋ ๋นํ์ฑํ๋ ๋ชจ๋ ๋ฒํผ์ ์์์ ๋ณ๊ฒฝํ๋ ์์์
๋๋ค
button:disabled {
color: gray;
}
์ ๊ธฐํ css๋ ์๋ค์
// ๋ชจ๋ pํ๊ทธ ์์ "Note: "๋ฅผ ๋ถ์
๋๋ค.
p::before {
content: "Note: ";
font-weight: bold;
}
์ ์ฒด ์นํ์ด์ง๋ฅผ ์ ํํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
๋ณดํต reset css ์ ์ฌ์ฉ๋ฉ๋๋ค.
* {
box-sizing: border-box;
}
์ ํ์๋ฅผ ์ฐ๊ฒฐํ๊ฑฐ๋ ๊ณจ๋ผ์ ์ ํํ๋ ๋ฐฉ๋ฒ
(์์ ๊ฒฐํฉ์)
์ฒซ๋ฒ์งธํ๊ทธ ํ์์ ์ง์์์ ํ๊ทธ๋ฅผ ์ ํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฆ ๋ถ๋ชจํ๊ทธ ๋ฐ๋ก ๋ฐ์ ์์ํ๊ทธ๋ง ์ ํํ๊ณ ๋ ๊น์ ํ์๋ค์ ์ ํํ์ง ์์ต๋๋ค.
parent > child {
/ ์คํ์ผ ๊ท์น /
}
์๋ ์ฝ๋๋, div ์์์ ์ง์ ์์์ธ ๋ชจ๋ p ์์๋ฅผ ์ ํํฉ๋๋ค.
div > p {
color: green;
}
//์ฌ๋ฌ๋ฒ ๋ค์ด๊ฐ์ ๊ตฌ์ฒด์ ์ ํ๋ ๊ฐ๋ฅํฉ๋๋ค
.container > section > h2 {
font-size: 24px;
}
(์์ ๊ฒฐํฉ์)
์ฒซ๋ฒ์งธ ํ๊ทธ ํ์์ ํ์ ํ๊ทธ๋ฅผ ์ ํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฆ ๋ถ๋ชจํ๊ทธ์ ๋ชจ๋ ๊น์ ํ์์ ์ ํํฉ๋๋ค.
ancestor descendant {
/ ์คํ์ผ ๊ท์น /
}
์๋ ์ฝ๋๋, divํ๊ทธ ํ์์ธ ๋ชจ๋ pํ๊ทธ ์ ํํฉ๋๋ค (์์, ํ์ ๋ชจ๋). ์ฆ div์๋ pํ๊ทธ๊ฐ ์๋ค๋ฉด DOMํธ๋ฆฌ ์ด๋์ ์์นํ๋ ์คํ์ผ์ด ์ ์ฉ๋ฉ๋๋ค.
div p {
color: blue;
}
(์ธ์ ํ์ ๊ฒฐํฉ์)
ํด๋น ๊ฒฐํฉ์๋ ์ฒซ๋ฒ์งธ ํ๊ทธ ๋ฐ๋ก ์๋ ๋๋ฒ์งธ ํ๊ทธ๊ฐ ์๋ค๋ฉด ์ ํํ๋ ๊ฒฐํฉ์์
๋๋ค
์๋ ์ฝ๋๋ <h3> ์์ ๋ฐ๋ก ๋ค์ ๋ถ์ด์๋ ์์๊ฐ <p> ์์๋ผ๋ฉด ์คํ์ผ์ ์ ์ฉํด์ค๋๋ค.
h3 + p {
text-indent: 1em;
}
์๋ ๊ฐ์ HTML์ธ ๊ฒฝ์ฐ์๋ง CSS๊ฐ ์ ์ฉ๋ฉ๋๋ค.
<h3>์ ๋ชฉ</h3>
<p>์ฌ๊ธฐ์๋ ๋ด์ฉ์ด ์ต๋๋ค.</p>
<p><a href="#">์ฌ๊ธฐ</a>๋ฅผ ํด๋ฆญํ์ธ์.</p>
์ด๋ค ์ ํ์ ๋ด๋ถ์ ๋ค๋ฅธ ์ ํ์๋ฅผ ๋ฃ์ด์ ๊ณ์ธต์ ์ธ ์คํ์ผ์ด ๊ฐ๋ฅ์ผํ๋ ๋ฌธ๋ฒ
CSS Nesting์ ์ง์ํ์ง ์์์ ๋๋, ์์์ ๋ณธ ์ฐ์ฐ์๋ฅผ ๋์ดํ์ฌ ํ๋์ฉ ์์ฑํ์์ต๋๋ค
nav {
/* ๋ค๋น๊ฒ์ด์
์คํ์ผ */
}
nav.light {
/* ๋ผ์ดํธ ๋ชจ๋ ๋ค๋น๊ฒ์ด์
์คํ์ผ */
}
nav.dark {
/* ๋คํฌ ๋ชจ๋ ๋ค๋น๊ฒ์ด์
์คํ์ผ */
}
nav > li {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋ฆฌ์คํธ ์คํ์ผ */
}
nav > li > ul {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋ฆฌ์คํธ ์์ ์๋ ์ผ๋ฐ ์์ดํ
์คํ์ผ */
}
nav > li > ul.new {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋ฆฌ์คํธ ์์ ์๋ ์๋ก์ด ์์ดํ
์คํ์ผ */
}
nav a {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋งํฌ ์คํ์ผ */
}
nav a:visited {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋งํฌ์ ๋ฐฉ๋ฌธ ์ํ ์คํ์ผ */
}
nav a:focus,
nav a:hover {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋งํฌ์ ํฌ์ปค์ค, ํธ๋ฒ ์ํ ์คํ์ผ */
}
์ ๋ฐฉ์์ ์ค๋ณต๋๋ ๋ถ๋ถ์ด ๋ง์ต๋๋ค.
nav > li > ul.new ์ด๋ ๊ฒ ํ๊ณ ๋ค์ด ๊ฐ ์๋ก ์ค๋ณต๋๋ ์ ๋ถ๋ถ์ ๊ณ์ ์จ์ค์ผํ๋ ๊ท์ฐฎ์์ด ์๊ธฐ์ฃ .
CSS Nesting ์ง์ ์ดํ ๋ถํฐ๋ ์ด๋ฐ ๋ฐฉ์์ด ์๋
ํ๋ฐฉ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ์ง์ํฉ๋๋ค
// ๐ Nesting ๋ณ๊ฒฝ
nav {
/* ๋ค๋น๊ฒ์ด์
์คํ์ผ */
&.light {
/* ๋ผ์ดํธ ๋ชจ๋ ๋ค๋น๊ฒ์ด์
์คํ์ผ */
}
&.dark {
/* ๋คํฌ ๋ชจ๋ ๋ค๋น๊ฒ์ด์
์คํ์ผ */
}
> li {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋ฆฌ์คํธ ์คํ์ผ */
> ul {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋ฆฌ์คํธ ์์ ์๋ ์ผ๋ฐ ์์ดํ
์คํ์ผ */
&.new {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋ฆฌ์คํธ ์์ ์๋ ์๋ก์ด ์์ดํ
์คํ์ผ */
}
}
}
a {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋งํฌ ์คํ์ผ */
&:visited {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋งํฌ์ ๋ฐฉ๋ฌธ ์ํ ์คํ์ผ */
}
&:focus,
&:hover {
/* ๋ค๋น๊ฒ์ด์
์์ ์๋ ๋งํฌ์ ํฌ์ปค์ค, ํธ๋ฒ ์ํ ์คํ์ผ */
}
}
}
์ ์ฝ๋ ์ฒ๋ผ Nesting์ ํ์ฉํ๋ฉด ์ค๋ณต๋ ์ฌ๋ผ์ง๊ณ ๊ณ์ธต ๊ตฌ์กฐ๋ ํ๋์ ํ์ ์ด ๊ฐ๋ฅํด์ง๋๋ค.
- ๋์ผํ ์ ํ์๋ฅผ ๋ฐ๋ณตํ ํ์๊ฐ ์์ด์ง๋๋ค.
- ๊ด๋ จ์๋ ์คํ์ผ์ด ๊ฐ๊น์ด ๊ณณ์ ๋ฌถ์ด ์ง๋๋ค.
- CSS ์คํ์ผ๊ณผ HTML ๋งํฌ์ ์ด ๋น์ทํ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
- ์คํ์ผ์ ์ฐพ๊ฑฐ๋ ํธ์ง, ์ญ์ ํ๋ ๊ฒ์ด ์์ํด ์ง๋๋ค.
- ๋ถํ์ํ ํด๋์ค ์ฌ์ฉ์ ์ค์ด๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํนํ ํด๋์ค์ ํ์๋ฅผ ํ์ฉํ๊ธฐ ์ํด ๊ณผ๋ํ๊ฒ classname์ ๋ถ์ฌํ๋ ๊ดํ์ ์์จ์ ์๊ฒ ๋์์ฃ
<article class="question">
<header class="question__header">
<h3 class="question__header__heading">์ง๋ฌธ</h3>
</header>
<p class="question__body">CSS Nesting์ ์จ๋ณด์
จ๋์?</p>
<footer class="question__footer">
<button class="btn secondary">์๋์ค</button>
<button class="btn primary">๋ค</button>
</footer>
</article>
// ๊ธฐ์กด ํด๋์ค ์ ํ์ ์คํ์ผ
.question__header__heading {
/* ์ด๋ค ์คํ์ผ */
}
.question__footer .btn.secondary {
/* ์ด๋ค ์คํ์ผ */
}
// ๋ค์คํ
์ ์ฉ
article {
> header {
h3 {
/* ์ด๋ค ์คํ์ผ */
}
}
> footer {
button.btn.secondary {
/* ์ด๋ค ์คํ์ผ */
}
}
@media (min-width: 768px) {
flex-direction: row;
margin-bottom: 0;
}
}