Tạo một website ổn với lượng CSS tối thiểu (2023)
(thecascade.dev)- Nhiều lập trình viên gặp phải những vấn đề không cần thiết vì thiết kế CSS quá mức
- Chỉ với một lượng style toàn cục tối thiểu cũng có thể tạo ra trang đủ gọn gàng và phản hồi tốt
- Chỉ cần giới hạn kích thước và hiển thị dạng block cho ảnh, SVG, video là có thể giải quyết các vấn đề bố cục cơ bản
- Có thể cải thiện khả năng đọc bằng font system-ui, giãn dòng phù hợp và giới hạn độ rộng tối đa của đoạn văn
- Cần áp dụng thuộc tính color scheme để phản ánh các tùy chọn môi trường như dark mode của hệ điều hành
Tạo một website ổn với lượng CSS tối thiểu
Vấn đề của CSS quá mức và cách tiếp cận
- Nhiều người khi làm website thường thiết kế CSS phức tạp quá mức
- Chỉ với CSS tối thiểu cũng có thể tạo ra một trang phản hồi tốt, đủ tinh tế và bám sát những điều cơ bản
HTML cơ bản và xử lý hình ảnh
-
Chỉ cần viết HTML cơ bản là website đã có khả năng phản hồi cơ bản
-
Do ảnh có thể gây ra vấn đề tràn bố cục, hãy áp dụng CSS dưới đây
img { max-width: 100%; display: block; } -
Nếu SVG, video gặp vấn đề tương tự, có thể mở rộng như sau
img, svg, video { max-width: 100%; display: block; }
Cải thiện typography
-
Font mặc định của trình duyệt dễ tạo cảm giác thiếu điểm nhấn về mặt thiết kế
-
Có thể dùng system-ui làm font family để áp dụng kiểu chữ mặc định phù hợp với từng nền tảng
-
Kích thước font và giãn dòng mặc định thường hơi nhỏ, vì vậy nên dùng thiết lập sau
body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } -
Chỉ với thiết lập này cũng đã cải thiện đáng kể so với mặc định của trình duyệt
Hỗ trợ dark mode
-
Vì nhiều người dùng thích dark mode, nên việc áp dụng thuộc tính color-scheme để đi theo thiết lập của hệ điều hành là rất hữu ích
html { color-scheme: light dark; } -
Thuộc tính này thiết lập để user agent style tự động phản ánh theme hệ thống được ưu tiên
-
Cũng có thể chỉ định bằng thuộc tính ngay trên thẻ HTML
<html lang="en" color-scheme="light dark"></html> -
Ngoài giá trị ưu tiên của hệ thống, việc cho phép tự chọn color scheme cũng là một best practice tốt
Giới hạn độ rộng nội dung
-
Độ dài của đoạn nội dung là yếu tố rất quan trọng ảnh hưởng đến khả năng đọc
-
Thông thường, lý tưởng nhất là mỗi dòng phần thân bài hiển thị trong khoảng 45~90 ký tự
-
Có thể cải thiện khả năng đọc của đoạn văn bằng cách giới hạn độ rộng tối đa của phần tử
mainnhư saumain { max-width: min(70ch, 100% - 4rem); margin-inline: auto; } -
Hàm
min()sẽ chọn giá trị nhỏ hơn giữa70chvà100% - 4rem -
margin-inline: autogiúp căn giữa theo chiều ngang -
Khi cần, có thể dùng class .container hoặc .wrapper thay cho main
Ví dụ CSS tối thiểu cuối cùng
-
Tổng hợp các nội dung trên, có thể xây dựng một website ổn định với bộ CSS tối thiểu như sau
html { color-scheme: light dark; } body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } img, svg, video { max-width: 100%; display: block; } main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }
Kết luận và khả năng mở rộng
- Ví dụ trên có thể dùng ngay như một điểm khởi đầu nhẹ nhàng hoặc cho các trang nhỏ
- Trong đa số trường hợp, nên mở rộng bằng cách thêm các style bổ sung trên nền tảng này
1 bình luận
Ý kiến trên Hacker News
system ui font familyvẫn còn đúnghttps://infinnie.github.io/blog/2017/systemui.html
stcủa font xấu quá nên tôi không muốn nhận lời khuyên về font từ trang đómax-width? Mục tiêu là tất cả những ai đang làm homepage cá nhânCái này sai. Cú pháp đúng là
Tác giả có viết đúng ở vài ví dụ khác, nhưng lại viết sai ở ví dụ đầu tiên nên dễ gây nhầm lẫn
kiểu thế này. Vì cả
timeslẫnTimes New Romanđều chạy không cần dấu ngoặc, nên tôi không rõ đó là vì đây là font cũ được xử lý ngoại lệ, hay vì CSS khá thoáng trong việc khớp tênCái này, tôi chỉ muốn gọi là cache money
https://meyerweb.com/eric/books/
img { max-width: 100%; }Thiết lập này nhất định phải đi cùng
height: auto. Nếu không thì tỷ lệ ảnh sẽ bị méoimg, svg, video { max-width: 100%; }Trên Chrome 141, do vấn đề width/height của phần tử SVG lồng nhau nên việc tính
autobị sai. Tạm thời phải xử lý bằngsvg:where(:not(svg svg))Font
system-uikhông đơn thuần là một phương án thay thế chosans-serif. Nếu dùng font UI hệ thống cho phần thân nội dung, ở một số tổ hợp OS/ngôn ngữ nó có thể khó đọc đến mức gần như không đọc nổi. Nếu cầnsans-serifthì cứ dùngsans-serifCỡ chữ mặc định hơi nhỏ, khoảng 18~20px (
1.25rem) là hợp lý. Nhưng trên màn hình nhỏ thì tốt nhất không vượt quá1remLine-height mặc định thường được khuyên là 1.5~1.7, nhưng 1.7 thì quá rộng trên màn hình nhỏ. Mức 1.4~1.5 là phù hợp hơn, và có thể điều chỉnh trong khoảng 1.4~1.6 tùy kích thước màn hình
font-family: System UI;Đây rõ ràng là lỗi cú pháp. Chỉ cần rà lại stylesheet là thấy ngay
Tách biệt theme sáng/tối của hệ thống với theme của web là một ý tưởng hay. Firefox mặc định cho phép nội dung đi theo theme hệ thống và cũng có thể chỉnh riêng
main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }Điều này có nghĩa là tối thiểu có khoảng đệm 2rem (nếu cộng cả body margin mặc định thì thành 2rem+8px). Khoảng đệm đó là quá nhiều, và vị trí áp dụng cũng hơi kỳ. Nếu áp dụng cho
mainthì dùng padding sẽ hợp lý hơn, như sauNhưng trên thực tế,
headerhayfootercũng cần cùng mức đệm hai bên, nên tốt hơn là chỉnh margin củabodyNhư vậy có thể giảm khoảng đệm từ khoảng ~40px xuống mức 16px