반응형
1. :lang()
- html 요소의 'lang' 속성에 지정된 언어를 기반으로 스타일 적용
- 모든 요소를 lang()에 설정된 언어로 인식
- 언어만 가능하기에 기호는 따로 설정 불가
2. unicode-range
- 특정 Unicode 문자 범위에 대해 폰트를 정의할 때 사용
- @font-face 규칙 내에서만 사용
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>한글, 영어, 한자, 기호 따로 CSS 적용하기</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
@import url('https://fonts.googleapis.com/css2?family=Dongle&family=Kalnia+Glaze:wght@100..700&family=Zhi+Mang+Xing&display=swap');
/* 한글 */
@font-face {
font-family: '양진체';
src: url('https://fastly.jsdelivr.net/gh/supernovice-lab/font@0.9/yangjin.woff') format('woff');
unicode-range: U+AC00-D7A3;
}
/* 영어 */
@font-face {
font-family: 'Ownglyph_UNZ-Rg';
src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2406-1@1.0/Ownglyph_UNZ-Rg.woff2') format('woff2');
unicode-range: U+0020-007F;
}
/* 한자 */
@font-face {
font-family: "Zhi Mang Xing", cursive;
unicode-range: U+4E00-9FFF;
}
/* 기호 */
@font-face {
font-family: 'EF_jejudoldam';
src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/noonfonts_2210-EF@1.0/EF_jejudoldam.woff2') format('woff2');
unicode-range: U+0021-002F, U+003A-0040, U+005B-0060, U+007B-007E;
}
.kor {
font-family: "양진체";
}
.chi {
font-family: "Zhi Mang Xing";
}
.eng {
font-family: "Ownglyph_UNZ-Rg";
}
.sym {
font-family: "EF_jejudoldam";
}
.test {
font-family: "Dongle";
}
</style>
</head>
<body>
<b>* 한글</b>
<p class="kor">가나다라마바사아자차카타파하</p>
<br>
<b>* 영어</b>
<p class="eng">abcdefghijklmnopqrstuvwxyz</p>
<br>
<b>* 한자</b>
<p class="chi">一二三四五六七八九十</p>
<br>
<b>* 기호</b>
<p class="sym">!@#$%^&*()</p>
<b>* 테스트</b>
<p class="test">dfjskdf 가나다라</p>
</body>
</html>
❕참고) 자주 사용될 수 있는 unicode-range 종류
기본값, 모든 글자 | unicode-range: U+0-10FFFF; |
영문 숫자, 특수문자, | unicode-range: U+0020-007E; |
영문 대문자 | unicode-range: U+0041-005A; |
영문 소문자 | unicode-range: U+0061-007A; |
특수문자 | unicode-range: U+0020-002F, U+003A-0040, U+005B-0060, U+007B-007E; |
숫자 | unicode-range: U+0030-0039; |
한글 | unicode-range: U+AC00-D7A3; |
일본어 | unicode-range: U+3000-30FF; |
일본어(반각 가타카나 포함) | unicode-range: U+3000-30FF, U+FF61-FFEF; |
한중일 통합 한 | unicode-range: U+4E00-9FAF; |
3. javascript
- selector를 통해 각 문자를 식별하고 스타일을 동적으로 적용
- 조건문을 통해 언어 종류 감지
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>한글, 영어, 한자, 기호 따로 CSS 적용하기</title>
<style>
.hangul {
color: red;
}
.chinese {
color: green;
}
.english {
color: blue;
}
.symbols {
color: yellow;
}
</style>
</head>
<body>
<b>* 한글</b>
<p class="text">가나다라마바사아자차카타파하</p>
<br>
<b>* 영어</b>
<p class="text">abcdefghijklmnopqrstuvwxyz</p>
<br>
<b>* 한자</b>
<p class="text">一二三四五六七八九十</p>
<br>
<b>* 기호</b>
<p class="text">!@#$%^&*()</p>
<script>
document.querySelectorAll('.text').forEach(p => {
const text = p.innerText;
let newText = '';
for (let char of text) {
if (/[가-힣]/.test(char)) { // 한글
newText += `<span class="hangul">${char}</span>`;
} else if (/[一-龥]/.test(char)) { // 한자
newText += `<span class="chinese">${char}</span>`;
} else if (/[a-zA-Z]/.test(char)) { // 영어
newText += `<span class="english">${char}</span>`;
} else { // 기호
newText += `<span class="symbols">${char}</span>`;
}
}
p.innerHTML = newText;
});
</script>
</body>
</html>
참고
- Thpark Log - unicode-range - 한글 한자 폰트를 다르게 써야할 때
https://thpark.imweb.me/dev/?idx=12286130&bmode=view
반응형
댓글