CSS
는 html
문서 내의 요소들의 스타일을 변경해줍니다.
p {
color: red;
font-size: 20px;
}
css
의 기본 선언 형태는 위와 같은 모습을 하고 있습니다.선택자(Selector)
: p
선언 블록(Declation Block)
: {}
선언(declations)
: 속성(Properties) - color, font-size
과 값: red, 20px
<html>
<head>
<link rel="stylesheet" href="style/main.css" />
</head>
</html>
<html>
<head>
<style>
p {
color: blue;
}
</style>
</head>
</html>
<head>
내의 자식 요소로 <style>
내에 선언할 수 있습니다.<html>
<head>
</head>
<body>
<p style="color: red">안녕하세요</p>
</body>
</html>
style
속성에 직접 선언할 수 있습니다. 하지만, 인라인 스타일은 디버깅이 힘들고, 재사용이 힘들기 때문에 지양하는 것이 좋습니다.css
의 원래 단어는 Cascading Style Sheet
입니다. Cascading
은 폭포수처럼 단계별로 흐르는 것을 의미합니다. 그러한 특성은 css
가 부모요소의 스타일을 자식 요소가 그대로 상속받는 특성으로 이어집니다.<html>
<head>
<style>
div {
color: red;
}
p {
color: blue;
}
</style>
</head>
<body>
<div>
<p>안녕하세요</p>
</div>
</body>
</html>
<div>
와 자식 요소인 <p>
둘 다 스타일이 지정되어 있습니다. 이런 상황에서는 적용 범위가 작은 자식 요소의 스타일을 사용하게 됩니다.tag < class < id < inline
위의 예시에서는 모두 선택자로 태그의 이름을 사용했습니다. 지금부터는 다양한 방법으로 조금 더 구체적이고 편한 방법으로 해당 요소를 선택할 수 있게하는 선택자
에 대해 알아보겠습니다.
<div class="cities">
<span id="capital">서울</span>
<span>부산</span>
</div>
.cities {
color: red;
}
#capital {
color: blue;
}
class
와 id
의 속성값으로 해당 요소를 선택할 수 있습니다. class
는 이름 앞에 .
을 붙이고, id
는 앞에 #
을 붙입니다. id
가 class
보다 우선 순위에 있기 때문에, 두 <span>
모두 cities
에 속하지만, 서울
은 id
값인 capital
의 스타일이 적용됩니다.<div>
<span title="capital">서울</span>
<span title="ocean">부산</span>
<span>인천</span>
</div>
span[title] {
color: blue;
}
span[title=ocean] {
color: green;
}
[]
안에 속성명만을 넣으면 해당 속성이 있는 모든 요소들을 말하고, [속성명=속성값]
의 형태로 특정 속성값도 선택할 수 있습니다.<a href="http://google.co.kr">구글 1</a>
<a href="http://google.com">구글 2</a>
<a href="https://google.com">구글 3</a>
<a href="https://google.com/maps">구글 4</a>
a[href*="google"] {
color: pink;
}
a[href^="http://"] {
color: red;
}
a[href$="maps"] {
color: green;
}
$, ^, *
을 덧붙여서 요소의 선택을 좀 더 상세히 설정할 수 있습니다.*
를 붙이면 특정 문자열이 포함된 모든 요소들을 선택합니다.^
을 붙이면 특정 문자열로 시작하는 모든 요소들을 선택합니다.$
를 붙이면 특정 문자열로 끝나는 모든 요소들을 선택합니다.<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
li:first-child {
color: red;
}
li:nth-child(3) {
color: blue;
}
li:nth-child(2n) {
color: green;
}
li:last-child {
color: yellow;
}
first-child, last-child, nth-child
은 선택자 옆에 :
과 함께 사용합니다.first-child
는 말 그대로, 해당 선택자 중 첫 번째 요소로 사용된 것을 선택합니다. 그런데 1 번 요소 뿐만 아니라 4번 li
요소에도 선택자의 영향이 끼치는 것을 알 수 있는데, first-child
는 첫 번째 li
요소를 선택하는 것이 아니라 li
요소이면서 li
요소의 부모 요소의 첫 번째 자식요소를 선택하기 때문입니다.last-child
는 해당 선택자 중 마지막 요소를 선택합니다.nth-child
는 뒤에 ()
안에 원하는 숫자를 넣거나 n
과 함께 여러 숫자에 적용하는 것도 가능합니다.first-of-type, last-of-type, nth-of-type
은 first-child, last-child, nth-child
와 매우 유사하지만 다른 점이 있기 때문에 사용할 때 유의해야 합니다.<ul>
<p>0</p>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
<ul>
의 자식 요소로 <p>
를 추가하고, 스타일은 그대로 적용했습니다.child
와 같은 스타일이 적용된 것 처럼 보입니다.<p>
태그에 기존의 child
스타일을 그대로 적용하면 아래와 같이 변합니다.type
은 선택자의 타입을 선택하고, child
는 부모의 자식 요소를 선택하는 것을 알 수 있습니다.<input type="text" />
<input type="password" />
<input type="number" />
input:not([type=password]) {
background-color: skyblue;
}
<a href="https://www.example.com">example</a>
<a href="https://www.google.com">구글</a>
a:link {
color: green;
}
a:visited {
color: yellow;
}
link
는 <a>
태그가 사이트에 방문하지 않은 경우에, visited
는 방문한 경우에 적용됩니다.구글
은 방문한 적이 있기 때문에 visited
의 선택자의 영향을 받고 있습니다.<input class="container" value="css에 대해 알아봅시다." />
input.container:hover {
color: red;
}
input.container:active {
color: green;
}
input.container:focus {
color: blue;
}
hover
는 커서가 해당 요소 위에 위치하고 있으면 적용됩니다.active
는 커서가 해당 요소를 클릭하고 있는 순간에 적용됩니다.focus
는 커서가 해당 요소에 위치하고 있을 때 적용됩니다.<input type="text"/> <br/>
<input type="text" disabled /> <br />
<input type="radio" checked />
<input type="radio" />
input:enabled {
background-color: yellow;
}
input:disabled {
background-color: green;
}
input[type=radio]:checked {
outline: 1px solid red;
}
enabled
는 disabled
속성이 없는 요소에 적용됩니다.disabled
는 disabled
속성이 있는 요소에만 적용됩니다.checked
는 <input>
의 타입이 radio
인 경우에 선택한 요소에만 적용됩니다.<p id="hello">반갑</p>
<p>습니다</p>
p#hello:before {
content: '안녕하세요! '
}
before
는 해당 요소의 앞에 생성되고, after
는 해당 요소의 뒤에 생성됩니다.content
라는 속성의 값이 화면에 보여집니다.<p>abc def hijk lmp</p>
<p>adsfjlkl sdajklfajsdkl asdlkfjklasdj asdfjkldsafjkl asdjfkljdaskl dsaljfklsdj adsfjlksdjkl asdfjlkasdjlk adsflkjasdkl sdafjlkasdklj daslkfjasdlk;fjnczxmv,n m</p>
p:first-letter {
color: red;
}
p:first-line {
color: green;
}
p::selection {
color: blue;
}
first-letter
는 해당 요소의 첫 글자를, first-line
은 해당 요소의 첫 줄을 선택합니다.selection
은 커서가 드래그한 영역만큼이 선택됩니다.<div class="division">
<span>111</span>
<span>222</span>
</div>
<div class="container">
<span>333</span>
<span>444</span>
</div>
<div class="division">
<span>555</span>
<span>666</span>
</div>
span:first-of-type {
color: blue;
}
span
으로 지정되는 모든 요소들이 선택됩니다. 그런데, 첫번째 div
내의 첫 번째 span
만을 선택하고 싶다면 span
자체에 class
를 추가할 수도 있지만, 그것보다는 기존의 코드를 활용하여 class
명이 division
인 div
의 하위 요소인 경우로 한정지을 수도 있습니다.div.division > span:first-of-type {
color: blue;
}
<ul>
<p>숫자들</p>
<li class="red">1</li>
<li class="green">2</li>
<li class="red">3</li>
<li class="blue">4</li>
</ul>
p ~ li {
color: red;
}
p + li {
color: blue;
}
~
을 사용하여 부모 요소가 같은 요소들 중 해당 요소보다 아래의 모든 요소들을 선택할 수 있습니다. +
을 사용하여 바로 인접한 요소를 선택할 수 있습니다.<div>div</div>
<span>span</span>
div, span {
color: yellow;
}
,
로 선택하고자 하는 요소들을 나열하여 원하는 요소들을 묶을 수 있습니다.css
는 부모 요소의 스타일을 상속 받는데, 상속을 원하지 않는 경우가 있을 수 있습니다. 그런 경우, 원하는 속성값에 initial
을 추가하여 상속을 무효화 시킬 수 있습니다. 모든 속성을 무효화시키고 싶으면 all
이라고 하면 됩니다.inherit
속성을 사용하면 됩니다.unset
은 기본적으로와 추가적으로 적용되어 있는 css
에 대해 초기화합니다.