html 태그 초창기 20개 > 현재 140개
css 속성 초창기 50개 > 현재 370
우리가 작성한 HTML의 스타일, 레이아웃 등 꾸미는 역할
소리도 꾸밈
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/* css의 기본 문법 */
h1 {
color: blue
}
</style>
</head>
<body>
<h1>Hello world</h1>
</body>
</html>
반복 작업을 줄이기 위해 좋은 예제를 찾고, 이를 분석하고 수정하며 체화하여 머릿속에서 바로 렌더링(코드를 실행해보는) 할 수 있도록 하는 것이 좋다. 단순히 프로세스를 줄이는 것 뿐만 아니라 중복된 코드를 줄이고, 더 체계적인 코드를 짤 수 있게 된다.
인라인 방식
w3c 측면으로는 정말 좋지 않은 코드 작성 방법
하지만 간단하게 코드 한 두개 정도 추가 시킬 때 가끔 사용
대신 가상 클래스는 적용 안됨 그래서 실무에선 권장 안함
<h1 style="color: mediumpurple">Hello world</h1>
내부 스타일
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/* 2. 내부 스타일 */
h2 {
color: aqua;
}
</style>
</head>
외부 스타일
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 3. 외부 스타일-->
<link rel="stylesheet" href="./002.css">
</head>
h$*n
h 태그를 n 번까지 생성
h${hello world}*3
h 내에 텍스트 삽입 후 생성
정확성에 따라 css가 반영됨
전체 선택자
유니버셜 셀렉터라고도 함
html내에 모든 요소를 선택함 그래서 로드에 관여해 필요할때만 사용
해당 선택자는 웬만해선 reset.css에서만 사용함
* {
color: red;
}
타입선택자
h1,
h2 {
background-color: aqua;
}
아이디 선택자
html 내에서 한번만 사용 될 수 있는 고유한 식별자. 같은 아이디는 재사용 X
재사용성이 많이 떨어짐
#one {
text-decoration: underline;
background-color: blanchedalmond;
}
클래스 선택자
문서 내에 여러개 설정할 수 있음
id와 다르게 같은 값이 여러개 존재 가능
한 태그 내에서 여러개의 클래스명 적용 가능 ==⇒ 재사용성이 뛰어남
.red {
color: red;
}
.border {
border: 1px solid #000;
}
특성 선택자
특정 속성을 가진 요소나 특정 속성 값을 가진 요소를 선택
작성은 [] 내에 속성/속성 값을 기입해서 작성
기본 문법: type이라는 속성을 가진 요소를 선택
/* type의 속성값이 button인 속성을 선택 */
[type] {
border: solid 2px red;
}
/* type의 속성값이 button인 속성을 선택 */
[type="button"] {
background-color: aqua;
}
/* 클래스 명이 btn으로 시작하는 요소를 선택 */
[class^="btn"] {
color: blue;
}
/* 클래스 명이 btn으로 끝나는 요소를 선택 */
[class$="btn"] {
font-weight: bold;
}
/*
not 키워드는 조건에 충족하는 요소를 제외한 나머지 요소를 선택
*는 ~~를 포함한다 라는 의미
해당 태그에서 해당 조건을 제외한 모든 요소를 선택
*/
input:not([class*="btn"]){
background-color: greenyellow;
}
자식 선택자
section > p {
color: blue;
}
일반 형제 선택자
section ~ p {
text-decoration: underline;
}
인접 형제 선택자
section + p {
background-color: chartreuse;
}
/* 색상 키워드로 폰트 색상 꾸미기 */
.key {
color: mediumpurple;
}
/* 색상환 코드를 16진수로 표기하여 색상을 꾸밈
#RRGGBB 구조
흰색 #ffffff, 검은색 #000000
*/
.code {
/*color: #fff;*/
}
/*레드, 그린, 블루 순으로 0부터 255까지의 정수값*/
.rgb {
color: rgb(255,0,0)
}
/*rgb랄 같은데 마지막은 불투명도 조절. 1에 가까울수록 붙투명*/
.rgba {
color: rgba(255,0,0,0.3)
}
/* 투명 */
.trans {
color: transparent;
}
글꼴은 텍스트의 시각적 특성을 결정하는 중요한 요소
웹 안전 폰트를 사용하거나 웹폰트를 불러와 사용할 수 있음 (웹폰트는 아래 페이지에서 확인)
/*웹폰트 링크 호출*/
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Single+Day&display=swap" rel="stylesheet">
<style>
/*폰트 페이스 호출*/
@font-face {
font-family: 'ClimateCrisisKR-1979';
src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/noonfonts_2212@1.0/ClimateCrisisKR-1979.woff2') format('woff2');
font-weight: 900;
font-style: normal;
}
/*
사용할 폰트 body에 적용
font-family에 2개가 적혀있는건 앞선 폰트가 적용 안되었을때 뒷 폰트가 적용된다.
*/
body {
font-family: "Single Day", cursive;
font-weight: 400;
font-style: normal;
}
p {
/*font-size: 34px;*/
/*font-size: 4em;*/
font-size: 4rem;
}
.normal {
font-weight: normal;
}
.bold {
font-weight: bold;
}
.custom {
/*font-weight: lighter;*/
/*font-weight: bolder;*/
/*100 ~ 900 숫자로 표현가능*/
font-weight: 100;
}
</style>
p {
width: 300px;
border: 1px solid #000;
/*text-align: left;*/
/*text-align: right;*/
/*text-align: center;*/
/*양쪽 정렬. 띄어쓰기의 불규칙적인 여백이 생겨서 해당 속성은 거의 쓰지않음*/
/*text-align: justify;*/
/* 대부분의 브라우저에서 호환되지 않는다 */
text-align: justify-all;
/* 행간 설정 */
line-height: 2;
/* 자간 설정 */
letter-spacing: 10px;
}
span {
font-size: 50px;
border: 1px solid #000;
line-height: 80px;
}
/* 텍스트 수직 정렬은 잘 안쓰고 flex 많이 씀
인라인, 인라인 블록, 테이블 요소에만 적용
*/
.baseline {
vertical-align: baseline;
}
.sub {
vertical-align: sub;
}
.super {
vertical-align: super;
}
.top {
vertical-align: top;
}
.middle {
vertical-align: middle;
}
.bottom {
vertical-align: bottom;
}
절대 길이 단위 : px
고정된 크기를 가지는 단위
상대 길이 단위 : %, vw, vh, em, rem (vmin, vmax)
상대적으로 크기를 나타낼 수 있는 단위
반응형 작업시 유용
1vw는 뷰포트 넓이의 1%, 1vh는 뷰포트 높이의 1%
em은 부모 요소로부터 상속받은 요소의 글자 크기를 기준으로 하는 배수 단위
rem은 ‘root em’의 줄임말로 최상의 요소 html의 글자 크기 기준으로 하는 배수인데 기본 사이즈는 16px이다.
/*부모요소의 폰트사이즈 : 10px
10px * 2 = 20px*/
.item1 {
font-size: 2em;
}
/* root html의 폰트사이즈: 8px
8px * 2 = 16px*/
.item2 {
font-size: 2rem;
}
/* 유지보수성을 위해 em, rem 단위를 적절하게 사용하는것이 중요!
아래처럼 작업했다면 해당 코드를 다 찾아가서 직접 수정해야함 */
/* p {
font-size: 12px;
}
div {
font-size: 16px;
}
span {
font-size: 7px;
} */
동적 가상 선택자
a:hover {
font-size: 2em;
}
/* 이미 방문한 링크일때 스타일 수정*/
a:visited {
color: mediumpurple;
}
/* 눌러졌을때 해당 앵커태그에 포커싱이 갔을때 */
a:focus {
background-color: orange;
}
구조적 가상 선택자
/* 구조적 가상 선택자 */
.box1 :first-child {
color: blue;
}
.box1 :last-child {
color: green;
}
/* 두번째 요소를 선택 */
.box2 :nth-child(2) {
color: antiquewhite;
}
/* 짝수인 요소들 선택 */
.box2 :nth-child(even) {
color: purple;
}
/* 홀수인 요소들 선택 */
.box2 :nth-child(odd) {
color: aquamarine;
}
/* 4의 배수 요소들 선택
n은 0부터 시작하는 정수
+,- 연산만 가능
2n + 1일 경우에 n이 0부터 시작하기 때문에 2*0 + 1
==> 1번째 요소부터 선택되는게 맞음
*/
.box2 :nth-child(4n) {
color: orange;
}
가상요소
/* 가상요소
img, br, input에는 적용 불가능
content 속성 필수 작성
*/
p:before {
content: '오르미 6기 여러분';
font-size: 24px;
color: hotpink;
}
p:after {
content: '🐥';
}
/* img, br, input태그는 빈태그이므로 가상 요소를 적용시킬수없음
img는 img src가 안들어가있으면 적용되는거 처럼 보임
*/
img:after {
content: '🐥';
}
br:after {
content: '🐥';
}
input:after {
content: '🐥';
}
input::placeholder {
color: blue;
}
!important 선언은 다른 모든 선언보다 우선합니다. 이는 매우 강력한 도구이지만, 남용하면 CSS의 예측 가능성과 유지보수성을 해칠 수 있습니다. !important 는 선택자 우선순위에 직접적인 영향을 미칩니다.