css에 대한 기초지식 공부
html의 기본구조를 꾸며주는 것이며,
스타일을 작업하는 것이라고 한다.
[HTML]
<span>Hello!</span>
[css]
div {
font-size: 50px;
color: blue;
text-decoration: underline;
}
html에 쓰인 div의 요소를 불러오며,
{}중괄호에 있는 css의 내용을 해당 요소에 적용하는 구조이다.
div {
color: red;
margin: 20px;
}
*해석 : div 태그의 css속성은 컬러는 레드이며, 여백은 20px이다.
/**/
주석처리를 해놓으면 브라우저에서 이 범위를 해석하지 않는다. (보여주지 않는다.)
/* 이 사이에 주석 설명 작성(메모) */
<style>
html내부에서 스타일(css)을 작성하는 방식
html에서 style태그의 내용으로 스타일을 작성하는 방식
<style>
div {
color: red;
margin: 20px;
}
</style>
<태그 style="속성: 값;">
html내부에서 스타일(css)을 작성하는 방식
요소의 style 속성에 직접 스타일을 작성하는 방식 (선택자 없음)
<div style="color: red; margin: 20px;></div>
<link rel="관계" href="경로">
html에서 link태그로 외부 파일인 css문서를 가져와서 연결하는 방식
<link rel="stylesheet" href="./css/main.css">
* rel은 html과의 관계이며,
href는 경로를 말한다.
./css는 html파일의 주변경로에 있으며 ./css/main.css는 css파일 안에 있는 main.css파일을 말한다.
@import
css문서 안에서 또다른 css의 문서를 가져와 연결하는 방식
[css]
@import url("./box.css");
*css파일 주변경로에 있는 box.css파일을 가져온다.
전체선택자 *
모든 요소를 선택한다는 것을 의미한다.
*으로 모든 요소를 선택
(css가 연결되어 있는 html의 모든 요소를 선택 한다.)
(예시는 복합선택자에서)
태그 선택자 태그이름
태그 이름에 해당되는 모든 요소 선택
[HTML]
<div>
<ul>
<li>사과</li> (선택O)
<li>딸기</li> (선택O)
<li>오렌지</li> (선택O)
</ul>
</div>
[css]
li {
color: red
}
* li에 해당되는 사과, 딸기, 오렌지 요소를 모두 선택 (li태그를 선택하였다.)
class 선택자 .(class name)
html에서 class의 속성값인 요소를 선택
[HTML]
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> (선택O)
</ul>
<span class="orange">오렌지</span> (선택O)
</div>
[css]
.orange {
color: red;
}
* li와 span태그 모두 선택되어 스타일(css)가 적용된다. (class명이 같기 때문)
id 선택자 #(id name)
html에서 id의 속성값을 선택
[HTML]
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li id="orange">오렌지</li> (선택O)
</ul>
<span class="orange">오렌지</span>
</div>
[css]
#orange {
color: red;
}
* li태그의 id명인 orange만 선택되어 스타일이 적용된다.
일치 선택자
[HTML]
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> (선택X)
</ul>
<span class="orange">오렌지</span> (선택O)
</div>
[css]
sapn.orange {
color: red;
}
*span에서 class명이 orange인 요소를 선택하여 스타일(css)을 적용한다.
자식 선택자 >
[HTML]
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> (선택O)
</ul>
<span class="orange">오렌지</span> (선택X)
</div>
[css]
ul>.orange {
color: red;
}
* ul태그의 자식 요소인 li중에서 .orange(class명이 orange)인 요소를 선택하여 스타일(css)을 적용한다.
하위(후손) 선택자 (띄어쓰기)
선택자의 하위요소를 선택한다.
[HTML]
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> (선택O)
</ul>
<span class="orange">오렌지</span> (선택O)
</div>
<span class="orange"></span> (선택X)
[css]
div .orange {
color: red;
}
*div의 자식요소 뿐만 아니라 모든 후손요소들 중에서 .orange(class명이 orange)인 요소를 선택하여 스타일(css)을 적용한다.
인접 형제 선택자 +
선택자의 다음 형제 요소를 하나 선택한다.
[HTML]
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> (선택X)
<li>수박</li> (선택O)
<li>망고</li>
</ul>
[css]
.orange+li {
color: red;
}
* .orange의 다음 형제요소(아래에 위치한)인 li를 하나만 선택한다.
일반 형제 선택자 ~
선택자의 다음 형제 요소를 모두 선택
❓❓❓❓❓
[HTML]
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> (선택X)
<li>수박</li> (선택O)
<li>망고</li> (선택O)
</ul>
[css]
.orange~li {
color: red;
}
*.orange의 다음 형제들(아래에 있는) 모두가 선택된다.
:hover
선택자 요소에 마우스 커서가 올라가 있는 동안에만 선택되는 요소
[HTML]
<a href="http://www.naver.com">NAVER</a>
[css]
a:hover {
color: red;
}
*HTML에서 작성된 NAVER링크에 마우스를 올리면 스타일(css)이 적용되어 글씨 컬러가 레드가 된다.
:active
선택자 요소에 마우스를 클릭하고 있는 동안 선택된다.
따라서 마우스 클릭을 눌렀다가 때면 적용된 스타일이 풀린다.
[HTML]
<a href="http://www.naver.com">NAVER</a>
[css]
a:active {
color: red;
}
:focus / tabindex
선택자 요소가 포커스가 되면 선택된다.
focus가 가능한 태그 요소는 html 대화형 콘텐츠에 해당한다.
예) input, a, button, label, select 등
html 대화형 콘텐츠 요소가 아니더라도 tabindex 속성을 사용한 요소도 가능하다.
(구글에 html 대화형 콘텐츠 mdn 검색해보고 참고하기)
focus가 불가능한 요소는
tabindex 속성을 통해 focus가 될 수 있는 요소로 만들 수 있다.
tabindex사용시 순서(값)로 -1이 아닌 다른 것을 넣는것은 권장하지 않는다.
한 페이지에서 한 요소만 가능하므로,
다른 것에 포커스가 되면 다른 요소는 포커스가 풀린다.
[HTML]
<input type:"text" />
[css]
input:focus {
background-color: red;
}
[HTML]
<div class="box" tabindex="-1"></div>
* focus가 불가능 한 요소인 div를 tabindex="-1"속성을 통해 focus가 가능하게 되었다.
가상 클래스 선택자
:first-child
선택자가 형제 요소 중 첫째라면 선택한다.
[HTML]
<div class="fruits">
<span>딸기</span> (선택O)
<span>수박</span>
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3>
</div>
[CSS]
.fruits sapn:first-child {
color: red;
}
* .fruits의 후손(하위) 요소인 span중에 첫째 요소를 선택한다.
[HTML]
<div class="fruits">
<span>딸기</span>
<span>수박</span>
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3>
</div>
[CSS]
.fruits div:first-child {
color: red;
}
💡 div가 선택되게 하고 싶을 경우)
1) .fruits *:nth-child(3) {}
2) .fruits:nth-child(3) {}
3) div에 class를 넣고 .fruits .div의 클래스명 작성
:last-child
선택자가 형제 요소 중 막내라면 선택한다.
[HTML]
<div class="fruits">
<span>딸기</span>
<span>수박</span>
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3> (선택O)
</div>
[CSS]
.fruits h3:last-child {
color: red;
}
:nth-child(n)
선택자가 형제 요소 중 (n)번째 라면 선택한다.
[HTML]
<div class="fruits">
<span>딸기</span>
<span>수박</span> (선택O)
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3>
</div>
[CSS]
.fruits *:nth-child(2) {
color: red;
}
*.fruits의 하위요소 중 * 전체중에 2번째 형제요소를 선택한다.
:nth-child(숫자n) / :nth-child(2n) / :nth-child(2n+1)
[HTML]
<div class="fruits">
<span>딸기</span>
<span>수박</span> (선택O)
<div>오렌지</div>
<p>망고</p> (선택O)
<h3>사과</h3>
</div>
[CSS]
.fruits *:nth-child(2n) {
color: red;
}
:nth-child(n+숫자)
[HTML]
<div class="fruits">
<span>딸기</span>
<span>수박</span> (선택O)
<div>오렌지</div> (선택O)
<p>망고</p> (선택O)
<h3>사과</h3> (선택O)
</div>
[CSS]
.fruits *:nth-child(n+2) {
color: red;
}
부정 선택자
:not()
()안의 선택자를 제외하고, :not 앞에 적힌 선택자 요소를 선택한다.
[HTML]
<div class="fruits">
<span>딸기</span>
<span>수박</span>
<div>오렌지</div> (선택O)
<p>망고</p> (선택O)
<h3>사과</h3> (선택O)
</div>
[CSS]
.fruits *:not(span) {
color: red;
}
* .fruits의 후손 요소 * 전부 중에 (span)을 제외한 요소를 선택한다.
[ ]
[ ]안에 들어간 속성을 포함한 모든 요소를 선택한다.
[HTML]
<input type="text" value="HELLOW">
<input type="password" value="1234">
<input type="text" value="ABCD" disabled> (선택O)
[CSS]
[disabled] {
color: red;
}
* 옳지 않은 예시 (수많은 요소가 선택됨)
[HTML]
<input type="text" value="HELLOW"> (선택O)
<input type="password" value="1234"> (선택O)
<input type="text" value="ABCD" disabled> (선택O)
[CSS]
[type] {
color: red;
}
[속성="값"]
[]안에 있는 속성을 포함하고,
""안에 있는 값의 요소를 선택한다.
[HTML]
<input type="text" value="HELLOW">
<input type="password" value="1234"> (선택O)
<input type="text" value="ABCD" disabled>
[CSS]
[type="password"] {
color: red;
}
css 스타일이 부모요소에 적용이 되면 자식요소에 그대로 상속되어 적용된다.
상속되는 css 속성들은 모두 글자,문자와 관련된 속성들이다.
(모든 글자, 문자 속성은 아니다.)
상속되는 글자, 문자 속성 예시)
font-style : 글자 기울기
font-weight : 글자 두께
font-size : 글자 크기
line-height : 줄 높이
font-family : 폰트(서체)
color : 글자 색상
text-align : 정렬
등 이 있다.
[HTML]
<div class="ecosystem">생태계
<div class="animal">동물 (선택O)
<div class="tager">호랑이</div> (선택O)
<div class="lion">사자</div> (선택O)
<div class="elephant">코끼리</div> (선택O)
</div>
<div class="plant">식물</div>
</div>
[CSS]
.animal {
color: red;
}
*.animal은 부모요소이고,
tager, lion, elephant는 자식요소 이므로 css에서 부모요소를 선택하면
부모요소와 자식 요소가 모두 선택된다.
강제 상속
inherit
자식요소의 값에 inherit을 입력하면
부모요소의 값을 상속받아 그대로 적용되어 사용한다.
이때 부모요소의 값이 바뀌면 자식요소의 값도 같이 변하게 된다.
[CSS]
.parent {
width: 300px;
height: 200px;
background-color: red;
}
.child {
widthL 100px;
height: inherit;
background-color: inherit;
}
*inherit은 강제상속을 시켜주는 값이므로
부모요소인 height값인 200px과 background-color값인 red를 그대로 가져오게 된다.
같은 요소가 여러 선언의 대상이 된 경우, 어떤 선언의 css속성을 우선 적용할지 결정하는 방법
*점수 계산
.list li.item {color: red;} (21점) 10+1+10
.list li:hover {color: red;} (21점) 10+1+10(가상클래스선택자도 class 로 계산한다.)
.box::before {content: "Good"; color: red;} (11점) 10+1 (가상요소=태그와 비슷한 개념이다.)
#submit span {color: red;} (101점) 100+1
header .menu li:nth-child(2) {color: red;} (22점) 1+10+1+10 (가상클래스 10점)
h1 {color: red;} (1점) 1
:not(.box) {color: red;} (10점) 10 (가상클래스/부정된 class는 제외)