폰트에 영향을 주는 속성으로 글꼴, 크기, 굵기, 기울임 등 다양한 스타일링이 가능
font-family
텍스트의 폰트를 지정하는 속성
...
<!--
preconnect
브라우저에게 해당 URL(https://fonts.gstatic.com)과 사전에 연결하라는 지시
브라우저는 문서 로딩 중에 이 지시를 인식하고 지정된 URL과 연결을 수립
이로써 DNS 조회, TCP 연결 설정 및 TLS 핸드셰이크와 같은 네트워크 단계를 미리 처리하여 페이지 로딩 시간을 단축
브라우저가 실제로 외부 도메인과 연결을 수립하는 것은 아니며, 연결을 준비하는 단계
-->
<!--
crossorigin
브라우저에게 해당 URL과의 사전 연결이 다른 도메인 간 자원 공유(CORS)를 위해 사용된다는 것을 알려줌
이 속성은 보안 상의 이유로 도메인 간 리소스 요청이나 스크립트에서 발생하는 CORS 문제를 해결하기 위해 필요한 조치
외부 도메인에서 오는 리소스 요청에 대해 액세스 제어를 구성할 수 있는 권한을 부여
-->
<!--
즉, preconnect와 crossorigin 속성을 함께 사용하여 브라우저에게 사전 연결을 설정하고 리소스를 안전하게 사용할 수 있도록 하고,
이는 웹 페이지의 성능을 향상시키고 사용자 경험을 개선하는 데 도움을 준다.
-->
<!-- 웹 폰트 -->
<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=Noto+Serif+KR:wght@200;300;400;500;600;700;900&display=swap"
rel="stylesheet">
<!-- 로컬 폰트 -->
<link rel="stylesheet" href="./css/suit.css" />
...
h1 {
/* font-family: family-name(폰트 이름), generic-family(범용 폰트그룹) */
font-family: "Noto Serif KR", serif;
}
범용 폰트 그룹
- Serif (세리프) 폰트 그룹
- Times New Roman
- Georgia
- Baskerville
- Garamond
- Palatino
- Sans-serif (산세리프) 폰트 그룹
- Arial
- Helvetica
- Verdana
- Futura
- Calibri
- Cursive (필기체) 폰트 그룹
- Brush Script MT
- Comic Sans MS
- Monotype Corsiva
- Lucida Handwriting
- Snell Roundhand
- Fantasy (판타지) 폰트 그룹
- Impact
- Jokerman
- Chiller
- Algerian
- Harrington
- Monospace (고정폭) 폰트 그룹
- Courier New
- Consolas
- Lucida Console
- Inconsolata
- Andale Mono
웹폰트@font-face
규칙을 사용하여 사용자 정의 글꼴을 원격 서버 또는 로컬에서 로드할 수 있다.
@font-face {
/* font 속성에서 폰트명(font face)으로 지정될 이름 */
font-family: <a-remote-font-name>;
/* 원격 폰트(remote font) 파일의 위치를 나타내는 URL 값을 지정하거나, 사용자 컴퓨터에 설치된 폰트명을 local("Font Name")형식으로 지정하는 속성 */
src: <source> [,<source>]*;
[font-weight: <weight>];
[font-style: <style>];
}
웹 폰트 vs 로컬 폰트
CDN(Content Delivery Network)
트래픽 부하를 분산시켜 원본 서버의 성능을 향상시키지만
구글 폰트를 link로 연결해서 사용할때는 구글 서비스가 종료 되었을때 문제가 생기지만 로컬 폰트를 사용하면 문제가 없다.
font-size
폰트의 크기를 지정하는 속성
구분 | xx-small | x-small | small | medium | large | x-large | xx-large |
---|---|---|---|---|---|---|---|
비율 | 3/5 | 3/4 | 8/9 | 1 | 6/5 | 3/2 | 2/1 |
Heading | h6 | h5 | h4 | h3 | h2 | h1 |
smaller
, larger
font-weight
폰트가 표시되는 굵기를 지정하는 속성, default는 400(normal, regular)
100~900
사이의 굵기 단계를 표시하는 수치값normal
, bold
, bolder
, lighter
등의 키워드font-style
폰트의 표시 형태를 지정하는 속성
normal
기본 형태italic
이탤릭체 또는 기울임꼴oblique
이탤릭체 또는 기울임꼴font-family
의 변경 없이 글꼴을 기울여 표시한다line-height
라인 박스의 높이를 설정, 일반적으로 줄 사이의 거리를 설정하며 블록 레벨 요소에서 요소 내 라인 상자의 최소 높이를 지정
font size의1.6배 권장
주로 디바이스의 방향을 나타내는 용어이다.
position: absolute
가 되면 display: block
inline 요소인 span
이 position: absolute;
상태가 되면 display가 block가 된다.
요소의 표시 영역을 잘라내거나 모양을 변경하는 데 사용한다.
div {
width: 200px;
height: 200px;
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
이를 이용해 웹 접근성을 고려해서 요소를 숨길 수 있다.
.a11yHidden {
overflow: hidden; /* overflow된 콘텐츠 숨김 */
position: absolute !important; /* nomal flow에서 해당 아이템 영역 제거 */
clip-path: polygon(0 0, 0 0, 0 0); /* 클리핑 범위를 모두 0 */
width: 1px; /* width 값 최소 */
height: 1px; /* height 값 최소 */
margin: -1px; /* 화면상에서 제거 */
}
화면에서 요소를 숨기고 스크린 리더가 해당 요소의 텍스트를 읽을 수 있다.
<a>
요소에 적용되는 가상 클래스 선택자 stylinga:link {
...
}
a:visited {
...
}
a:hover, a:focus {
...
}
a:visited
은 a:link
보다 뒤에 정의되어야 한다.a:hover
또는 a:focus
스타일이 정의되기 전에 a:link
또는 a:visited
스타일이 정의되면 이벤트 발생 시 스타일이 적용되지 않을 수 있다.따라서
a:link
를 먼저 정의하고, 그 다음에a:visited
,a:hover
,a:focus
순으로 정의하자!!!
요소의 크기를 계산하는 방법. default는box-sizing: content-box;
기본적으로 요소의 크기는 콘텐츠 영역의 크기에만 영향을 받지만,
box-sizing: border-box;
를 적용하면 border와 padding을 포함한 전체 크기를 나타낸다.
.box-sizing-example {
width: 200px;
height: 200px;
border: 20px solid black;
/* box-sizing: content-box || border-box */
}
기본 상태에서는 콘텐츠 영역의 크기가 border를 포함한 240x240 이지만,
box-sizing: border-box;
를 적용하게 되면 border를 포함한 값인, 설정했던 200x200이 된다.
em
rem
은 상대 단위. 즉, 고정되지않고 어떠한 기준에 따라 변동될 수 있다.
기본적으로 em
rem
은 모두 font-size
따라 결정된다.
font-size
가 16px인 경우 1em = 16px
, 2em = 32px
이다.
그렇다면 em
과 rem
의 차이점은 무엇일까?
em
em
값은 상위 요소의 폰트 크기에 비례한다.rem
(root em
)
<html>
)의 폰트 크기에 상대적으로 크기를 지정한다.html {
font-size: 16px;
}
body {
font-size: 1.5em; /* 16px * 1.5 = 24px */
}
div.box1 {
font-size: 2em; /* 24px * 2 = 48px */
}
div.box1 > span {
font-size: 0.5em; /* 48px * 0.5 = 24px */
}
div.box1 > p {
font-size: 1.8rem; /* 16px * 1.8 = 28.8px */
}