CSS (7) - Định dạng chữ

-----

1.1       Định dạng chữ

1.1.1       Cỡ chữ

Trong phần này, chúng ta sẽ tìm hiểu các nội dung sau:

– Thiết lập được cỡ chữ

– Hiểu về các giá trị, các đơn vị đo có thể sử dụng để thiết lập cỡ chữ

– Quan sát một số kinh nghiệm thiết lập cỡ chữ cho giao diện web

Để thiết lập kích cỡ của chữ, sử dụng thuộc tính font-size:

– Giá trị: đơn vị đo chiều dài | phần trăm | xx-small | x-small | small | medium | large | x-large | xx-large | smaller | larger

– Mặc định: medium

– Áp dụng: cho mọi phần tử

– Kế thừa: có

Lưu ý, việc thiết lập cỡ chữ không chỉ làm thay đổi cỡ của chữ, mà nó còn làm thay đổi các độ đo dựa trên cỡ chữ, như em, ex.

Thuộc tính font-size có thể nhận các kiểu giá trị: các đơn vị đo kích thước, phần trăm, các từ khóa.

– Đơn vị đo kích thước tương đối (em, rem), tuyệt đối (px), ví dụ:

h1 { font-size: 1.5em; }

h1 { font-size: 1.5rem; }

h1 { font-size: 30px; }

Lưu ý: đơn vị đo phải viết liền ngay sau giá trị số, viết như sau là bị lỗi,

h1 { font-size: 1.5 em; }

– Giá trị %, thể hiện tỉ lệ (tăng hoặc giảm) so với cỡ chữ của phần tử mà nó kế thừa, ví dụ:

h1 { font-size: 150%; }

Khi đó, nếu phần tử h1, là con của body. Mà body có cỡ 16px, thì h1 sẽ có cỡ chữ là 24px.

– Các từ khóa kiểu tuyệt đối, như: xx-small, x-small, small, medium, large, x-large, xx-large. Với hầu hết các trình duyệt, medium sẽ tương ứng với kích thước phông mặc định, ví dụ,

h1 { font-size: x-large; }

– Các từ khóa kiểu tương đối, như: larger, smaller. Kết quả là chữ sẽ to hơn hoặc nhỏ hơn so với các chữ lân cận. Ví dụ,

strong { font-size: larger; }

Để tối ưu trong lập trình, chúng ta nên sử dụng 2 đơn vị đo tương đối (em, rem) và giá trị phần trăm (%). Bạn cũng có thể sử dụng đơn vị đo tuyệt đối là px, tuy nhiên, nó không đảm bảo tính hiệu quả, uyển chuyển, và linh hoạt trong quá trình thiết kế trang web.

Về mặt tâm lý, người duyệt web sẽ có xu hướng cảm thấy dễ chịu, khi sử dụng những gì quen thuộc, được coi là mặc nhiên. Cỡ chữ cũng vậy.

Chúng ta có thể thiết lập cỡ chữ trong một trang web theo cách sau:

– Sử dụng cỡ chữ mặc định của trình duyệt (16px), bằng cách thiết lập cỡ chữ cho phần tử html là 100%. Bạn cũng có thể thiết lập cho phần tử body là 100% thay vì phần tử hmtl, tuy nhiên, thiết lập cho phần tử html để sử dụng được đơn vị đo là rem.

        html { font-size: 100%; }

– Các phần tử còn lại sẽ được thiết lập cỡ chữ dựa trên phần tử html, bằng cách dùng các đơn vị đo tương đối (rem, em, %). Ví dụ, cỡ chữ của tiêu đề không thiết lập cố định là 24px, mà nó sẽ là 1.5 so với cỡ chữ của phần tử html.

        h1 { font-size: 1.5rem; } /* 1.5 x 16px = 24px */

Đơn vị đo rem, là viết tắt của "root em", 1rem tương đương với kích thước phông chữ của phần tử html. Nếu kích thước phông chữ của html là 16px, thì 1rem = 16px.

Đơn vị đo em, là kích thước phông chữ của phần tử hiện tại. Nếu kích thước phông chữ của phần tử là 24px, thì 1em = 24px. Người ta hay dùng đơn vị đo em để thiết lập cho margin, pading, border, width, height cho một phần tử.

Có một câu hỏi thú vị là, nếu chúng ta muốn thiết lập kích thước phông chữ cho phần tử hiện tại bằng em thì sao? Ví dụ, chúng ta quan sát đoạn mã sau:

    <style>

        html { font-size: 100%; }

        h1 { font-size: 1.5em; } /* 1.5 x 16px = 24px */

    </style>

</head>

<body>

    <h1>Tiêu đề h1</h1>

Ở đoạn mã trên, do h1 chưa được thiết lập kích thước phông chữ một cách tường minh, nhưng chúng ta lại dùng đơn vị đo em, nên h1 sẽ kế thừa kích thước phông chữ từ phần tử cha của nó (là html).

Quan sát thêm một ví dụ khác:

    <style>

        html { font-size: 100%; }

        article { font-size: 0.875em } /* 0.875 x 16px = 14px */

        h1 { font-size: 1.5em; } /* 1.5 x 14px = 21px */

    </style>

</head>

<body>

    <article>

        <h1>Tiêu đề h1</h1>

    </article>

Quan sát hai đoạn mã ở trên, chúng ta thấy h1 đều được thiết lập kích thước phông chữ là 1.5em. Tuy nhiên, kích thước phông chữ thực tế là 24px và 21px cho hai trường hợp khác nhau, do phần tử cha của h1 ở hai trường hợp là khác nhau. Do vậy, đơn vị đo là em phụ thuộc vào từng ngữ cảnh cụ thể.

Nếu các phần tử lồng nhiều cấp, và đều dùng đơn vị đo là em sẽ dẫn tới tình trạng trình duyệt phải tính toán nhiều lần, vừa tốn thời gian, tốn tài nguyên và có thể bị sai lệnh do làm tròn số.

Chúng ta cũng có thể sử dụng đơn vị phần trăm (%) để thiết lập cỡ chữ. CSS sẽ lấy cỡ chữ được kế thừa từ phần tử cha, nhân với giá trị %, để có được cỡ chữ của phần tử hiện tại. Ví dụ:

    <style>

        html { font-size: 100%; }

        article { font-size: 75% } /* 75% x 16px = 12px */

        h1 { font-size: 150%; } /* 150% x 12px = 18px */

    </style>

</head>

<body>

    <article>

        <h1>Tiêu đề h1</h1>

    </article>

</body>

Ở đoạn mã trên, phần tử html kế thừa cỡ chữ mặc định của trình duyệt (16px), bằng cách thiết lập font-size: 100%. Phần tử article là con của html, có cỡ chữ: 75% x 16px = 12px. Phần tử h1 là con của article, có cỡ chữ: 150% x 12px = 18px.

Chúng ta đã tìm hiểu về các giá trị của thể sử dụng để thiết lập cỡ chữ. Tuy nhiên, để biết cách lựa chọn cỡ chữ phù hợp cho các nội dung khác nhau trên trang web, thì chúng ta cần đọc thêm các chủ đề chuyên sâu về trình bày văn bản hoặc quan sát cách thiết lập cỡ chữ trên các trang web đang có trên Internet. Ví dụ, bạn vào trang themeforest, tìm một giao diện bạn ưa thích và quan sát cỡ chữ của các nội dung khác nhau trên trang web.

1.1.2       Độ đậm của chữ

Chúng ta đã chọn được phông chữ và cỡ chữ cho văn bản. Phần này chúng ta sẽ thay đổi độ đậm nhạt (lạt) của văn bản, sử dụng thuộc tính font-weight:

– Giá trị (values): normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900

– Mặc định: normal

– Áp dụng: cho mọi phần tử

– Kế thừa:

Mặc dù trong dãy các giá trị về độ đậm nhạt của phông chữ gồm có bốn từ khóa mô tả (normal, bold, bolder, lighter) và 9 giá trị thể hiện độ đậm của chữ (100,…,900). Tuy nhiên, trong thực tế các phông chữ thường chỉ có hai chế độ là normalbold. Do vậy, đây chính là hai giá trị thường được sử dụng. Các trình duyệt cũng thường không hỗ trợ đầy đủ các giá trị về độ đậm nhạt. Với các giá trị số, thông thường giá trị từ 600 trở lên sẽ là chữ đậm.

Ví dụ,

dt { font-weight: bold; }

1.1.3       Kiểu chữ nghiêng

Sử dụng thuộc tính font-style để thiết lập kiểu dáng (posture) của văn bản. Văn bản thường có hai kiểu dáng là kiểu đứng (normal) và kiểu nghiêng (italic hoặc oblique).

Thuộc tính font-style:

– Giá trị: normal | italic | oblique

– Mặc định: normal

– Áp dụng: cho mọi phần tử

– Kế thừa:

Cả hai giá trị italicoblique đều hiển thị dạng chữ nghiêng, tuy nhiên, italic là một kiểu chữ được thiết kế riêng, trong khi oblique là kiểu chữ thông thường được hiển thị ở dạng nghiêng. Tuy vậy, kết quả hiển thị của văn bản, ứng với hai giá trị này, trên hầu hết các trình duyệt là như nhau.

1.1.4       Kiểu chữ hoa đặc biệt

Sử dụng thuộc tính font-variant với giá trị là small-caps để chuyển dạng chữ thường sang dạng chữ hoa,với kích thước ở dạng chữ hoa đúng bằng kích thước ở dạng chữ thường.

Thuộc tính font-variant:

– Giá trị: normal | small-caps

– Mặc định: normal

– Áp dụng: cho mọi phần tử

– Kế thừa:

Để ý chữ small-caps chính là viết tắt của small capitals (chữ hoa nhỏ).

1.1.5       Viết rút gọn các thuộc tính phông

Ở các phần trên, chúng ta đã tìm hiểu một số thuộc tính liên quan đến phông chữ. Để tránh việc lặp lại và giảm số dòng mã, có thể sử dụng thuộc tính font để gom các định dạng liên quan đến phông vào chỉ dẫn CSS.

Thuộc tính font:

– Giá trị: font-style font-weight font-variant font-size/line-height font-family | inherit

– Mặc định: tùy thuộc vào giá trị của mỗi thuộc tính được liệt kê ở trên

– Áp dụng: cho mọi phần tử

– Kế thừa:

Giá trị của thuộc tính font chính là giá trị của tất cả các thuộc tính đã được liệt kê ở trên, mỗi giá trị cách nhau bằng một khoảng trắng. Lưu ý: tính thứ tự của các giá trị là quan trọng, do vậy không thể xáo trộn vị trí của chúng, thứ tự cụ thể là,

{ font: style weight variant size/line-height font-family }

Ở dạng tối giản, thuộc tính font cũng phải có hai giá trị là font-sizefont-family. Nếu thiếu một trong hai hoặc đặt sai vị trí sẽ dẫn tới chỉ dẫn bị lỗi. Ví dụ một chỉ dẫn tối giản,

p { font: 1em sans-serif; }

Nếu trong chỉ dẫn đã có hai giá trị bắt buộc (font-size và font-family) rồi, thì các giá trị còn lại sẽ là tùy chọn, miễn là đứng trước font-size. Nếu các giá trị của style, weight và variant không xác định thì CSS sẽ sử dụng giá trị mặc định là normal. Trong thuộc tính font còn có một giá trị mới là line-height, đây là chiều cao của hàng văn bản, được sử dụng để thêm khoảng trắng giữa các hàng, giá trị này nằm ngay sau giá trị font-size, ngăn cách bằng dấu xuyệt (/). Ví dụ,

h3 { font: oblique bold small-caps 1.5em/1.8em Verdana, sans-serif; }

h2 { font: bold 1.75em/2 sans-serif; }

1.1.6       Màu chữ

Để thiết lập màu chữ, sử dụng thuộc tính color.

Thuộc tính color:

– Giá trị: giá trị màu (tên màu hoặc giá trị số)

– Mặc định: tùy thuộc vào trình duyệt và thiết lập của người dùng

– Áp dụng: cho mọi phần tử

– Kế thừa:

Giá trị của thuộc tính color có thể là tên màu, CSS2 cung cấp sẵn 17 tên màu, CSS3 cung cấp sẵn 140 tên màu. Ví dụ một số tên màu,

Black, white, purple, lime, navy, aqua, silver, maroon, fuchsia, olive, blue, orange, gray, red, green, yellow, teal.

Giá trị của thuộc tính color cũng có thể là giá trị số, bắt đầu là dấu #, hoặc rgb sau đó là bộ ba giá trị của ba màu cơ bản là Red, Green và Blue (RGB), Ví dụ, màu xám sẽ có giá trị là #666 hoặc #666666.

Ví dụ, để phần tử h1 có màu xám, có thể sử dụng một trong các chỉ dẫn CSS sau,

h1 { color: gray; }

h1 { color: #666666; } /* R = 66, G = 66, B = 66 */

h1 { color: #666; } /* R = 6, G = 6, B = 6 */

h1 { color: rgb(102,102,102); }

Vì thuộc tính color có tính kế thừa, nên để thiết lập màu cho toàn bộ văn bản, thay vì làm cho từng phần tử thì có thể thực hiện một lần cho phần tử body. Ví dụ,

body { color: gray; }

Để ý là thuộc tính color không phải chỉ để thiết lập màu cho chữ, mà theo mô tả của CSS thì nó được sử dụng để thay đổi “màu mặt trước” (foreground color đối lập với màu nền – background) của một phần tử. Mặt trước bao gồm văn bản và đường biên. Do vậy, khi thiết lập màu cho phần tử (bao gồm phần tử img) bằng thuộc tính color cũng đồng thời thiết lập màu cho đường biên.

1.1.7       Xem và đọc thêm

– [1] Jenifer Niederst Robbins, Learning Web Design, O’Reilly, 2018, trang 269 - 280

– [2] font-size: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size

– [3] font-weight: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight

1.1.8       Bài tập và thực hành

Bài tập 1. Viết lại các đoạn mã trong phần lý thuyết.

Bài tập 2. Setting font size.

Let’s refine the size of some of the text elements to give the online menu a more sophisticated appearance. Open menu.html (get this file from Bài tập2 in Phông chữ topic) in a text editor and follow the steps. You can save the document at any point and take a peek in the browser to see the results of your work. You should also feel free to try out other size values along the way.

1. There are many approaches to sizing text on web pages. In this example, start by putting a stake in the ground and setting the font-size of the body element to 100%, thus clearing the way for em measurements thereafter:

body {

font-family: Verdana, sans-serif;

font-size: 100%;

}

2. The browser default of 16 pixels is a fine size for the main page text, but I would like to improve the appearance of the heading levels. I’d like the main heading to be 24 pixels, or one and a half times larger than the body text [target (24) ÷ context (16) = 1.5]. I’ll add a new rule that sets the size of the h1 to 1.5em. I could have used 150% to achieve the same thing.

h1 {

font-size: 1.5em;

}

3. Now make the h2s the same size as the body text so they blend in with the page better:

h2 {

font-size: 1em;

}

Bài tập 3. Mở một trang web trên Internet (ví dụ một trang trong themeforest, báo Thanh niên, hoặc thegioididong, …), sử dụng Developer tools để ghi lại các phông chữ, cỡ chữ, độ đậm, kiểu dáng đã sử dụng. Điền kết quả vào bảng sau:

Nội dung

Phông chữ

Cỡ chữ

Độ đậm

Kiểu dáng

Menu chính

 

 

 

 

Đoạn văn bản

 

 

 

 

Nội dung vùng chân trang (page footer)

 

 

 

 

Tiêu đề mức 1 (h1)

 

 

 

 

 

 

 

 

Bài tập 4. Dùng HTML để tạo nội dung Resume, định dạng phông chữ bằng CSS, đưa Resume lên Github. Làm nhiều thì quen tay, làm nhiều thì biết nhiều, làm nhiều nghĩa là đã kiên trì.

– Các bước để tạo một Resume:

https://www.w3schools.com/howto/howto_website_create_resume.asp

– Làm Resume giống như mẫu sau:

https://www.w3schools.com/howto/tryw3css_templates_cv.htm

1.1.9       Câu hỏi ôn tập

Câu 1. _____ is defined relative to the font size of the root element. The root element is matched by the :root pseudo-class or the html selector. 1____ therefore takes on the value which is given to the font-size of the root element.

A. em

B. rem

C. %

D. vw

Câu 2. Chỉ dẫn CSS nào sau đây bị lỗi:

A. h1 { font-size: 100%; }

B. h1 { font-size: 20px;   }

C. h1 { font-size: 1.5rem;   }

D. h1 { font-size: 1.5 em; }

Câu 3. Trong CSS, muốn định dạng chữ nghiêng, sử dụng thuộc tính nào?

A. font-weight

B. font-style

C. font-variant

D. font-size

Câu 4. Cho đoạn mã sau:   

<style>

        html { font-size: 100%; }

        article { font-size: 0.875em } /* 0.875 x 16px = 14px */

        h1 { font-size: 1.5em; } /* 1.5 x 14px = 21px */

    </style>

</head>

<body>

    <article>

        <h1>Tiêu đề h1</h1>

    </article>

Cỡ chữ của h1 là bao nhiêu px?

A. 16

B. 21

C. 14

D. 24

Đáp án: 1(B), 2(D), 3(B), 4(B)

-----
Cập nhật: 29/5/2024
-----

Tải tài liệu đầy đủ: Tự học HTML căn bản