[CSS] 3. 폰트 관련 속성



3. 폰트 관련 속성

<div>
    <p class=default">
        이것은 예시 P 태그 내용
    </p>
    <p class=text">
        이것은 예시 P 태그 내용
    </p>
</div>

.text {
    font-size: 12px;
    font-style: italic;
    // font-style: normal
    font-weight: 700


}

font-size

  • 대부분의 브라우저의 기본 설정은 16px
  • px, em, rem, % 자주 사용


font-style

  • 이탤릭체를 사용하고 싶을 때 사용
  • default = normal
  • italic
  • olbique
  • 글꼴에 따라 italic이 필기체처럼 보이는 것이 있음
  • 하지만 대부분 글꼴은 둘이 차이가 없다.


font-weight

  • 글자 굵기
  • default = normal = 400
  • bold 도 자주 사용


시멘틱적 요소로 <bold><i>를 하는 것은 의미가 있지만, 스타일적으로 추가하는 것은 아무 의미가 없다.


font-family

// Times 없으면 Arial 없으면 sans-serif
.text {
    font-family: 'Times New Roman', Times, Arial, sans-serif;
}
  • 글꼴 자체를 변경하기 위해 사용
  • 윈도우 : 맑은 고딕이 기본
  • sans-serif : 끝이 꺾이지 않은 글꼴
  • , 로 구분한다.
  • 띄어쓰기가 있다면 그건 ‘‘로 감싸준다.


line-height

.text {
    line-height: 2.0;
}
  • 줄의 높이를 의미
  • font size 가 같더라도 글꼴에 따라서 default line-height 가 다를 수 있다.
  • line-height 사용시, 글꼴에 상관없이 높이를 맞출 수 있다.
  • px, rem 등의 단위 표현도 사용 가능


font와 단축속성 (shorthand)

.text {
    color: red;
    font-size: 20px;
    font-family: 'Times New Roman', Times, Arial, sans-serif
}

// 둘이 완전 동일하다
.text {
    color: red;
    font: 20px 'Times New Roman', Times, Arial, sans-serif
}

// style, weight는 무조건 size 보다 앞에 있어야 한다.
// line-height는 무조건 size 바로 뒤 / 하고 사용
.text {
    color: red;
    font: italic 800 20px/1.7 'Times New Roman', Times, Arial, sans-serif
}

// 마지막 font에서 font-style이 명시되어 있지 않기때문에 default 값으로 변경되어
// 2번째 줄의 font-style 무시된다
// 주의하기
.text {
    color: red;
    font-style: italic
    font: 800 20px/1.7 'Times New Roman', Times, Arial, sans-serif
}
    
  • font 관련된 속성을 한줄로 단축하여 작성할 수 있는 것
  • 필수 속성 : font-size, font-family
  • 선택 속성 : font-style, font-variant, font-weight, line-height


letter-spacing, word-spacing

.text {
    letter-spacing: 5px
}
  • letter-spacing: 글자간의 간격
  • word-spacing : 단어 사이의 간격
  • 글꼴별로 이미 정해진 기본값이 있다.
  • default = normal
  • 글꼴별로 default 값이 다르다
  • letter-spacing: 5px 주면 기본 간격보다 5px 씩 더 멀어진다
  • 음수도 가능하다.
  • 글자 음수 지양하기
  • 글꼴 만든사람이 이미 가장 이쁘게 만들어놓은 값이기 때문에 굳이 필요한 상황 아니면 하지 말자.


text-align

.text {
    text-align: center;
}
  • center : 가운데 정렬
  • left : 왼쪽 정렬
  • right : 오른쪽 정렬
  • 블록 요소일때 : 블록라인 전체를 기준으로 정렬
  • 인라인 요소일때 : 인라인 기준으로 정렬 (어차피 꽉 차있기 때문에 변화가 없다.)
  • 인라인 요소에 text-align 주고 싶다면 > 부모에 블록 요소를 추가하여 해당 요소에 처리하여 상속받게 하자(div)


text-indent

.text {
    text-indent: 20px;
}
  • 들여쓰기
  • inherited: Yes 이기 때문에 자식 요소에 상속이 된다.
  • 인라인 요소에는 적용되지 않는다.
  • px, % 사용 가능하다.


text-decoration

// text-decoration은 순서 상관 없다.
// line은 multiple로 할 경우 꼭 붙어 있어야한다.
// color 만 지정하면 text-decoration은 color 값 상속받는다.
p {
    color : blue
    text-decoration: underline overline red 3px double;
}
  • css 단축 속성 중 하나 (shorthand)
  • 필수 요소 : text-decoration-line
  • 선택 요소 : text-decoration-color, text-decoration-style, text-decoration-thickness(두께)
  • font 는 shorthand 보다 따로따로 많이 쓰지만 이건 shorthand를 더 많이 쓴다.


text-decoration-line

  • default : none
  • underline, overline(윗줄), line-throuht(중간 취소선)
  • 멀티플로 여러개 다 사용 가능


text-decoration-style

  • 줄이 어떻게 생겼는지
  • default : solid
  • double, dotted, dashed, wavy


word-break

<p lang="en">
    aaaaaaaaaaaaaaaaaaaaaaaaaa
</p>

<p lang="ko">
    가나다라마바사아자차카타파하
</p>

// 글자수가 width보다 커서 뚫고 지나간다.
// 배경색은 120px 에만 적용된다.
p {
    width: 120px;
    background-color: red;
}

// 120px 맞춰서 줄바꿈이 된다.
p[lang="en"] {
    width: 120px;
    background-color: red;
    word-break: break-all
}

// 기본으로 120px에 맞춰서 줄바꿈이 됐지만
// 그걸 취소하여 초기의 en class 처럼 뚫고 지나간다.
// 스페이싱이 있으면 줄바꿈은 된다.
p[lang="ko"] {
    width: 120px;
    background-color: red;
    word-break: kepp-all
}
  • 언어에 따라 동작하는 방식이 다르다.
  • defalut: normal
  • break-all : 한중일 텍스트 제외 > 영어에서 주로 사용
  • keep-all : 한중일 텍스트만 적용


text-transform

p {
    text-tranform: uppercase;
}
  • 한글에는 적용할 수 없다.
  • 사용할 수 있는 언어가 한정되어 있다.
  • default == none
  • uppercase : 대문자로 변경
  • lowercase : 소문자로 변경
  • capitalize : 단어의 첫 글자가 대문자로 변경


나의 회고 🤫

text-align 속성이 인라인 요소에는 적용이 안되는 사실을 오늘 처음 알았다.
항상 적용이 왜 언제는 되고 언제는 안될까 의문이었는데 그 의문을 해결할 수 있었다.
인라인 요소에 적용하고 싶을 때는 부모요소로 블록요소 집어 넣기!!
shortand도 정확한 이해가 없었어서 항상 하나하나 입력했는데 앞으로는 잘 활용하여 코드수를 줄여봐야겠다