[패스트캠퍼스] React& Redux로 시작하는 웹 프로그래밍 강의 수강 1주차(6)
CSS 개요
CSS 기본 문법
선택자 { 속성: 값; 속성: 값; }
*선택자란? 스타일을 적용할 대상(Selector)
*속성이란? 스타일의 종류(Property)
*값이란? 스타일의 값(Value)
주석 (단축키: Ctrl+/)
/* 설명 작성 */
CSS 선언 방식
1. 내장 방식
<style></style>의 내용(Contents)으로 스타일을 작성하는 방식. HTML 문서에 직접 사용하기 때문에 CSS 파일을 사용X.
그러나 유지, 보수 측면에서 권장하지 않음.
<style>
div {
color: red;
margin: 20px;
}
</style>
2. 인라인 방식
요소의 style 속성에 직접 스타일을 작성하는 방식(선택자 없음). 인라인 방식은 지나치게 우선하기 때문에(유지, 보수 측면에서) 권장하지 않음.
<div style="color: red; margin: 20px;"></div>
3. 링크 방식
<link />로 외부 CSS 문서를 가져와서 연결하는 방식. 병렬로 연결되며, 가장 많이 사용되는 방식. 아래 차례로 html, main.css
<link rel="stylesheet" href="./css/main.css">
div {
color: red;
margin: 20px;
}
4. @import 방식
CSS의 @import 규칙으로 CSS 문서 안에서 또 다른 CSS 문서를 가져와 연결하는 방식. 직렬로 연결되는 방식이므로 연결을 지연시키는 목적으로 사용됨. 아래 차례로 html, main.css, box.css
<link rel="stylesheet" href="./css/main.css">
@import url("./box.css");
div {
color: red;
margin: 20px;
}
.box {
background-color: red;
padding: 20px;
}
선택자
1. 기본 선택자
1) 전체 선택자(Universal Selector)
*
모든 요소를 선택함.
* {
color: red;
} /* html의 모든 요소가 선택됨. */
2) 태그 선택자(Type Selector)
태그 이름
해당 태그를 선택함.
li {
color: orange;
} /* <li></li>태그에 해당하는 요소가 선택됨. */
3) 클래스 선택자(Class Selector)
.클래스이름
HTML class 속성의 값 이름에 해당하는 요소를 선택함.
<div class="fruits">오렌지</div>
<span class="fruits">사과></span> <!-- class는 중복 가능 -->
.fruits {
color: red;
} /* HTML에서 class이름이 fruits에 해당하는 요소들이 선택됨. */
4) 아이디 선택자(ID Selector)
#아이디이름
HTML id 속성의 값 이름에 해당하는 요소를 선택함.
<div id=apple>사과</div> <!-- id는 중복할 수 없음. -->
#apple {
color: red;
} /* HTML에서 id이름에 해당하는 요소가 선택됨. */
2. 복합 선택자
1) 일치 선택자(Basic Combinator)
띄어쓰기 없이 2가지 선택자를 이어서 씀.
선택자 2가지를 동시에 만족하는 요소를 선택함.
주의) 전체 선택자 > 태그 선택자 > 클래스 선택자 > id 선택자 순으로 적는 것을 권장.
<span class="orange">오렌지</span>
span.orange {
color: red;
} /* HTML에서 span 태그와 orange 클래스를 동시에 만족하는 요소를 찾아 선택함. */
2) 자식 선택자(Child Combinator)
선택자 > 선택자
선택자의 자식 요소를 선택함.
<ul>
<li>사과</li>
<li class="orange">오렌지</li>
</ul>
ul > .orange {
color: red;
} /* ul 선택자의 자식 중 orange 클래스를 가진 요소를 선택함. */
3) 하위(후손) 선택자(Descendant Combinator)
선택자 선택자
선택자의 하위 요소(선택자)를 선택함. 띄어쓰기 이용. 일반적으로 하위 선택자를 많이 이용.
<div>
<ul>
<li class="apple">사과</li> <!-- 선택됨 -->
</ul>
<span class="apple">사과</span> <!-- 선택됨 -->
</div>
<span class="apple">사과</span> <!-- 선택 안됨 -->
div .apple {
color: red;
} /* div의 하위 요소 중 apple 클래스 이름을 가진 요소를 선택함. */
4) 인접 형제 선택자(Adjacent Sibling Combinator)
선택자 + 선택자
선택자의 다음 형제 요소 "하나"를 선택함.
<ul>
<li>딸기</li>
<li class="orange">오렌지</li>
<li>망고</li> <!-- 선택됨 -->
<li>사과</li>
</ul>
.orange + li {
color: red;
} /* orange 클래스의 바로 다음 li인 망고가 선택됨 */
5) 일반 형제 선택자(General Sibling Combinator)
선택자 ~ 선택자
선택자의 다음 형제 요소를 "모두" 선택함.
<ul>
<li>딸기</li>
<li class="orange">오렌지</li>
<li>망고</li> <!-- 선택됨 -->
<li>사과</li> <!-- 선택됨 -->
</ul>
.orange ~ li {
color: red;
} /* orange 클래스 다음의 모든 li 태그 요소를 선택함. */
3. 가상 클래스 선택자
동작에 관한 가상 클래스 선택자
1) 선택자:hover
선택자 요소에 마우스 커서가 올라가 있는 동안 선택됨.
<a href="http://www.naver.com">NAVER</a>
a:hover {
color: red;
} /* a태그에 마우스를 올렸을 때 스타일이 적용됨 */
2) 선택자:active
선택자 요소에 마우스를 클릭하고 있는 동안 선택됨.
<a href="http://www.naver.com">NAVER</a>
a:active {
color: red;
} /* a태그가 클릭되었을 때 스타일이 적용됨 */
3) 선택자:focus
선택자 요소가 포커스 되면 선택됨.
*focus가 될 수 있는 요소는 HTML 대화형 콘텐츠(input, a, button, label, select 등)
<input type="text />
input:focus {
background-color: red;
} /* input 요소에 입력 커서를 넣게 되면(focus) 스타일이 적용됨 */
*tabindex 속성을 사용한 요소도 focus 될 수 있음.
*tabindex: tab키를 사용해 focus 할 수 있는 순서를 지정하는 속성. -1 값 이외에는 권장하지 않음.
<div class="box" tabindex="-1"></div> <!-- tabindex를 이용해 focus 적용 -->
<input type="text />
.box:focus {
width: 300px;
background-color: blue;
} /* div요소인 box 클래스에 focus 적용 */
input:focus {
background-color: orange;
}
요소에 관한 가상 클래스 선택자
1) 선택자:first-child
선택자가 형제 요소 중 첫째라면 선택함.
<div class="fruits">
<span>딸기</span> <!-- 선택됨 -->
<span>수박</span>
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3>
</div>
.fruits span:first-child { /* fruits 클래스 하위 요소 중(하위 선택자) span태그와 일치하는(일치선택자) 첫째 자식을 선택 */
color: red;
}
2) 선택자:last-child
선택자가 형제 요소 중 막내라면 선택함.
<div class="fruits">
<span>딸기</span>
<span>수박</span>
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3> <!-- 선택됨 -->
</div>
.fruits h3:last-child { /* fruits 클래스 하위 요소 중(하위 선택자) h3태그와 일치하는(일치 선택자) 막내를 선택함. */
color: red;
}
3) 선택자:nth-child(n)
선택자가 형제 요소 중 n째라면 선택.
<div class="fruits">
<span>딸기</span>
<span>수박</span> <!-- 선택됨 -->
<div>오렌지</div>
<p>망고</p>
<h3>사과</h3>
</div>
.fruits *:nth-child(2) { /* fruits 클래스 하위 요소 중(하위 선택자) 전체 선택자 중(일치 선택자) 2번째 자식을 선택함. */
color: red;
}
*(n)에 n을 사용할 수 있음. 이때 n은 0부터 시작함.
.fruits *:nth-child(2n) { /* 이때 n은 0부터 시작. 2n은 짝수번째를 선택하게 됨. */
color: red;
]
.fruits *:nth-child(2n+1) { /* 홀수번째 자식들을 선택하게 됨. */
color: red;
}
4) 부정선택자 선택자:not("선택자")
"선택자"가 아닌 요소를 선택함.
<div class="fruits">
<span>딸기</span>
<span>수박</span>
<div>오렌지</div> <!-- 선택됨 -->
<p>망고</p> <!-- 선택됨 -->
<h3>사과</h3> <!-- 선택됨 -->
</div>
.fruits *:not(span) { /* fruits 클래스의 하위 요소 중(하위 선택자) 전체 선택자 중(일치 선택자) span태그 요소를 제외하고 선택함. */
color: red;
}
4. 가상 요소 선택자
1) 선택자::before
가상의 인라인(글자) 요소를 만들어서 선택자 요소 내부의 가장 앞에 내용을 삽입함.
<div class="box">
<!-- 이 부분에 삽입됨. -->
Content!
</div>
.box::before {
content: "앞!";
}
2) 선택자::after
선택자 요소 내부의 가장 뒤에 내용을 삽입함.
<div class="box">
Content!
<!-- 이 부분에 삽입됨. -->
</div>
.box::after {
content: "뒤!";
}
*before/after를 사용할 때는 반드시 content CSS속성을 사용해야 함.(비워두더라도)
5. 속성 선택자
1) [속성]
속성을 포함한 요소 선택함. 특이한 속성값을 찾을 때는 유용하지만, 일반적으로 사용되지는 않음.
<input type="text value="hello">
<input type="password" value="1234">
<input type="text value="ABCD" disabled> <!-- disabled 속성을 가진 태그에 스타일이 적용됨 -->
[disabled] {
color: red;
}
2) [속성="값"]
속성을 포함하고, 값이 일치하는 요소를 선택함.
<input type="text value="hello">
<input type="password" value="1234"> <!-- 선택됨 -->
<input type="text value="ABCD" disabled>
[type="password"] {
color: red;
}
스타일 상속
.animal {
color: red;
}
<div class="ecosystem">생태계
<div class="animal">동물 <!-- 적용됨 -->
<div class="tiger">호랑이</div> <!-- 적용됨(상속) -->
<div class="lion">사자</div> <!-- 적용됨(상속) -->
<div class="elephant">코끼리</div> <!-- 적용됨(상속) -->
</div>
<div class="plant">식물</div>
</div>
출력시 다음과 같은 형태.
생태계 동물 호랑이 사자 코끼리 식물 |
*모든 속성이 자동으로 상속되지는 않음.
상속되는 CSS 속성: 모두 글자/문자 관련 속성들 일부.
font-style | 글자 기울기 |
font-weight | 글자 두께 |
font-size | 글자 크기 |
line-height | 줄 높이 |
font-family | 폰트(서체) |
color | 글자 색상 |
text-align | 정렬 |
*강제 상속 inherit
속성: inherit;
자동으로 상속되지 않는 속성들(글자/문자 관련 속성 이외)에 강제로 상속할 때 사용하며, 부모의 스타일이 자식에 강제로 상속됨.
.parent {
width: 300px;
height: 200px;
background-color: orange;
}
.child {
width: inherit; /* 300px이 됨. */
height: inherit; /* 200px이 됨. */
background-color: inherit; /* orange가 됨. */
}
선택자 우선순위
우선순위란, 같은 요소가 여러 선언의 대상이 된 경우, 어떤 선언의 CSS 속성을 우선 적용할지 결정하는 방법
1. !important -> 사용 권장X
2. 인라인 선언인 경우 -> 사용 권장X
3. 복합 선택자(?)
4. ID 선택자
5. Class 선택자
6. 태그 선택자
7. 전체 선택자
*같은 우선 순위라면, 더 나중에 작성된 코드가 우선함.
'[패캠] React& Redux로 시작하는 웹 프로그래밍' 카테고리의 다른 글
HTML 전역 속성 (0) | 2022.09.14 |
---|---|
HTML 핵심 요소(태그) 정리 (0) | 2022.09.14 |
HTML 문서 기본 (0) | 2022.09.06 |
VSCode 확장 프로그램 및 단축키 모음 (0) | 2022.09.03 |
프론트엔드(Front-End) 개요 (0) | 2022.08.11 |