본문 바로가기

텍스트 꾸미기

텍스트는 웹 페이지의 핵심 요소입니다. HTML로 구조를 만들고 CSS로 폰트와 폰트 스타일을 적용할 수 있습니다. 이번 장에서는 텍스트를 꾸미는 다양한 CSS 속성들을 살펴보겠습니다.

속성설명예시
color텍스트 색상color: red;
font-family글꼴 종류font-family: 'Noto Sans';
font-size글꼴 크기font-size: 16px;
font-weight글꼴 굵기font-weight: bold;
text-align가로 정렬text-align: center;
vertical-align세로 정렬vertical-align: middle;
line-height행간line-height: 1.6;
letter-spacing자간letter-spacing: 0.1em;

1. color 색상

텍스트의 색상은 color 속성으로 설정합니다. 이 속성은 폰트 색상을 나타내며, font- 접두사가 붙지 않는다는 점에 유의해야 합니다. 색상을 표현하는 방법에는 여러 가지가 있습니다.

표현 방법형식예시
키워드색상 이름red, blue, green
Hex 코드#RRGGBB#ff0000, #00ff00
RGBrgb(R, G, B)rgb(255, 0, 0)
RGBArgba(R, G, B, A)rgba(255, 0, 0, 0.5)
HSLhsl(H, S%, L%)hsl(0, 100%, 50%)

실무에서는 주로 Hex 코드를 사용하며, 투명도가 필요한 경우 rgba()를 자주 활용합니다.

예를 들어, 다음과 같이 텍스트 색상을 설정할 수 있습니다.

<p class="keyword-color">키워드로 설정한 색상</p>
<p class="hex-color">HEX 코드로 설정한 색상</p>
<p class="rgb-color">RGB로 설정한 색상</p>
<p class="rgba-color">투명도가 있는 RGBA 색상</p>
.keyword-color {
  color: red;
}
.hex-color {
  color: #00ff00;
}
.rgb-color {
  color: rgb(0, 0, 255);
}
.rgba-color {
  color: rgba(255, 0, 0, 0.5);
}

또한, currentColor 키워드를 사용하면 현재 요소의 색상 값을 상속받아 다른 속성에 적용할 수 있습니다. 이는 일관된 색상을 유지하는 데 유용합니다.

<div>
  <p>안녕하세요</p>
</div>
div {
  color: sandybrown;
}
p {
  border: 1px solid currentColor;
}

색상 표현 Tip!

  1. Hex 값으로 color를 표현할 때, 3자리로 줄여서 표현할 수 있습니다. 예를 들어, #ff0000은 #f00으로 줄여서 표현할 수 있습니다.
  2. 좀 더 다양한 색의 이름과 Hex 코드를 확인하려면 W3Schools를 참고하세요. 자주 사용되는 컬러 이름은 기억해 두면 유용합니다.

2. 글꼴 설정하기

글꼴은 텍스트의 시각적 특성을 결정하는 중요한 요소입니다. font-family 속성을 사용하여 글꼴을 지정할 수 있습니다. 웹 안전 폰트를 사용하거나 웹 폰트를 불러와 사용할 수 있습니다.

웹 폰트를 사용하려면 먼저 폰트를 불러와야 합니다. Google Fonts나 눈누와 같은 웹 폰트 서비스를 이용하면 쉽게 다양한 폰트를 사용할 수 있습니다. 예를 들어, Google Fonts에서 'Noto Sans KR' 폰트를 사용하려면 다음과 같이 설정합니다.

<head>
  <link
    href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300&display=swap"
    rel="stylesheet"
  />
  <style>
    body {
      font-family: 'Noto Sans KR', sans-serif;
    }
  </style>
</head>
Google Fonts 눈누

3. 글꼴 크기 조정하기

font-size 속성으로 글꼴의 크기를 조절할 수 있습니다. 크기 단위로는 절대 단위인 px와 상대 단위인 em, rem 등이 자주 사용됩니다. em은 현재 요소의 부모 요소에 설정된 글꼴 크기를 기준으로 하는 상대 단위이고, rem은 루트 요소(html)에 설정된 글꼴 크기를 기준으로 합니다.

<div class="px-size">
  <div class="px-size">px 단위로 설정한 크기</div>
</div>
<div class="em-size">
  <div class="em-size">em 단위로 설정한 크기</div>
</div>
<div class="rem-size">
  <div class="rem-size">rem 단위로 설정한 크기</div>
</div>
.px-size {
  font-size: 18px;
}
.em-size {
  font-size: 1.2em;
}
.rem-size {
  font-size: 1.2rem;
}

위 예제에서 em과 rem의 차이점을 확인할 수 있습니다. em은 부모 요소의 글꼴 크기를 기준으로 하기 때문에 중첩된 요소의 글꼴 크기가 계속해서 커지는 현상이 발생할 수 있습니다. 반면 rem은 루트 요소의 글꼴 크기를 기준으로 하기 때문에 이러한 현상이 발생하지 않습니다.

왜 em, rem, vw, vh 같은 단위를 쓰는 건가요?

반응형 웹페이지 개발, 유지보수 등에 용이합니다!

4. 글꼴 굵기 설정하기

font-weight 속성으로 텍스트의 굵기를 조절할 수 있습니다. normal(기본값), bold(굵게), lighter(부모 요소보다 한 단계 가볍게), bolder(부모 요소보다 한 단계 굵게) 등의 키워드나 100부터 900까지의 숫자 값을 사용할 수 있습니다.

<p class="normal-weight">일반 굵기의 텍스트</p>
<p class="bold-weight">굵은 텍스트</p>
<p class="custom-weight">사용자 정의 굵기의 텍스트</p>
<h1>
  hello world
  <h1>
    <p class="heading-1">hello world</p>
  </h1>
</h1>
.normal-weight {
  font-weight: normal;
}
.bold-weight {
  font-weight: bold;
}
.custom-weight {
  font-weight: 600;
}
.heading-1 {
  font-weight: 700;
}

5. 텍스트 정렬하기

text-align 속성은 텍스트의 가로 정렬을 설정합니다. 이 속성은 블록 레벨 요소 내의 인라인 콘텐츠(텍스트, 인라인 요소)를 정렬하는 데 사용됩니다.

값설명
left왼쪽 정렬 (기본값)
right오른쪽 정렬
center중앙 정렬
justify양쪽 정렬 (마지막 줄 제외)
justify-all양쪽 정렬 (마지막 줄 포함)
<p class="left-align">
  이 텍스트는 왼쪽 정렬입니다. 웹에서 가장 일반적인 정렬 방식입니다.
</p>
<p class="right-align">
  이 텍스트는 오른쪽 정렬입니다. 주로 날짜나 숫자 등에 사용됩니다.
</p>
<p class="center-align">
  이 텍스트는 중앙 정렬입니다. 제목이나 특별한 강조가 필요한 경우에 사용합니다.
</p>
<p class="justify-align">
  이 텍스트는 양쪽 정렬입니다. 긴 문단에 사용될 수 있지만, 불규칙한 간격으로
  인해 가독성이 떨어질 수 있습니다. 따라서 사용 시 주의가 필요합니다.
</p>
.left-align {
  text-align: left;
}
.right-align {
  text-align: right;
}
.center-align {
  text-align: center;
}
.justify-align {
  text-align: justify;
}

양쪽 정렬 적용 시 불규칙한 여백(흰 강 현상- River of white)은 가독성에 있어 좋지 못해 권하지 않습니다.

흰 강 현상 예시

6. 세로 정렬 다루기

vertical-align 속성은 인라인 요소나 테이블 셀 요소의 수직 정렬을 조정합니다. 이 속성은 블록 레벨 요소에는 적용되지 않는다는 점에 주의해야 합니다.

값설명
baseline부모의 기준선에 맞춤 (기본값)
top줄의 가장 위에 맞춤
middle부모의 중앙에 맞춤
bottom줄의 가장 아래에 맞춤
text-top부모 텍스트의 위에 맞춤
text-bottom부모 텍스트의 아래에 맞춤
  • 인라인, 인라인 블록 및 테이블 셀 요소에만 적용됩니다!
  • 블록 레벨에서 수직 정렬하고 싶다면 추후 배울 flex를 사용하면 됩니다!
  • 간혹 이미지에서 위아래 여백이 생기는 이유이기도 합니다. 여백 이슈가 생긴다면 vertical-align: bottom을 사용해 보세요.
<div>
  텍스트
  <div class="box baseline">baseline</div>
</div>
<div>
  텍스트
  <div class="box top">top</div>
</div>
<div>
  텍스트
  <div class="box middle">middle</div>
</div>
<div>
  텍스트
  <div class="box bottom">bottom</div>
</div>
<div>
  텍스트
  <div class="box text-top">text-top</div>
</div>
<div>
  텍스트
  <div class="box text-bottom">text-btm</div>
</div>
div {
  line-height: 2.5;
}

div > div {
  line-height: 1;
  background: yellow;
}

.box {
  display: inline-block;
}

.baseline {
  vertical-align: baseline;
}
.top {
  vertical-align: top;
}
.middle {
  vertical-align: middle;
}
.bottom {
  vertical-align: bottom;
}
.text-top {
  vertical-align: text-top;
}
.text-bottom {
  vertical-align: text-bottom;
}

이번에는 이미지에서 불필요한 여백이 생기는 것을 확인해 보고 CSS 탭으로 이동하여 vertical-align: bottom을 주석을 풀어 사용해 보세요.

<span>
  <img src="https://picsum.photos/200/" alt="Placeholder" class="bottom" />
</span>
span {
  background: hotpink;
}
/* .bottom { vertical-align: bottom; } */

7. 행간 조정하기

line-height 속성은 텍스트 줄 사이의 간격, 즉 행간을 설정합니다. 이 속성은 텍스트의 가독성에 큰 영향을 미치므로 적절히 조정하는 것이 중요합니다.

값설명예시
숫자글꼴 크기의 배수line-height: 1.5;
길이px, em 등 단위line-height: 20px;
백분율글꼴 크기 기준line-height: 150%;
normal브라우저 기본값 (약 1.2)line-height: normal;

일반적으로 본문 텍스트의 경우 1.5~2 사이의 값을 사용하면 좋은 가독성을 얻을 수 있습니다.

<p class="normal-line-height">
  이 텍스트는 기본 행간을 사용합니다. 때로는 줄 간격이 좁아 가독성이 떨어질 수
  있습니다.
</p>
<p class="increased-line-height">
  이 텍스트는 증가된 행간을 사용합니다. 줄 사이의 간격이 넓어져 읽기가 더
  쉬워집니다.
</p>
.normal-line-height {
  line-height: normal;
}
.increased-line-height {
  line-height: 1.6;
}

8. 자간 조정하기

letter-spacing 속성은 글자 사이의 간격, 즉 자간을 조절합니다. 이 속성을 사용하면 텍스트의 밀도를 조정하거나 특별한 시각적 효과를 줄 수 있습니다. 값은 길이 단위(px, em 등)로 지정하며, 음수 값도 사용할 수 있습니다.

<h2 class="normal-spacing">일반 자간</h2>
<h2 class="wide-spacing">넓은 자간</h2>
<h2 class="narrow-spacing">좁은 자간</h2>
.normal-spacing {
  letter-spacing: normal;
}
.wide-spacing {
  letter-spacing: 0.3em;
}
.narrow-spacing {
  letter-spacing: -0.05em;
}

추후에 JavaScript를 배우게 되면 행간이나 자간을 좀 더 인터렉티브한 효과를 줄 수도 있습니다. 아래는 자간을 조정하여 3D 효과를 준 예시입니다. 행성 주위에 띠는 글자의 자간을 좁혀 만든 것입니다. JavaScript를 활용하면 마우스를 오버했을 때 띠의 자간을 조정하는 등의 기능을 추가할 수 있습니다.