Web Monospace
(owickstrom.github.io)- Đây là một trang thử nghiệm sắp xếp các phần tử web theo lưới ký tự, giúp hiển thị văn bản, bảng, sơ đồ và media gần với thẩm mỹ terminal kiểu thập niên 1970
- Tài liệu Markdown đơn giản được chuyển đổi bằng Pandoc, rồi HTML ngữ nghĩa được render lên lưới monospace bằng CSS và rất ít JavaScript
- Cách xử lý responsive không co theo pixel mà theo đơn vị kích thước ký tự, bảng cũng tự điều chỉnh theo lưới nhưng chỉ cho phép một cột có thể giãn ra
- Hỗ trợ các phần tử tiêu chuẩn như đoạn văn thường, đường phân cách,
<details>, danh sách, danh sách dạng cây, bảng, biểu mẫu, containergrid, hình ASCII dựa trên<pre>, cùng hình ảnh và video - Toàn bộ mã nguồn được công khai trên GitHub, nên có thể fork hoặc sao chép những phần cần thiết theo điều kiện giấy phép
Trang web được cấu thành từ lưới ký tự
- Phông chữ monospace có thể mang lại cảm giác dễ đọc, nhất quán và đẹp hơn phông tỷ lệ cho một số người dùng
- Trang này là một thử nghiệm kỹ thuật và sáng tạo nhằm xây dựng mọi thành phần bằng web monospace
- Cách triển khai là chuyển tài liệu Pandoc từ Markdown, rồi dùng CSS và một ít JavaScript để đặt HTML ngữ nghĩa lên lưới ký tự
- Bố cục responsive sẽ co lại theo đơn vị kích thước ký tự thay vì pixel để phù hợp với bề rộng màn hình
- Mục tiêu là làm cho các phần tử HTML tiêu chuẩn hoạt động tự nhiên trong lưới monospace mà không cần thêm thao tác phức tạp
Các phần tử được hỗ trợ và cách bố trí
- Markup cơ bản gồm đoạn văn thường, đường kẻ ngang và phần tử
<details> - Danh sách hỗ trợ cả dạng gạch đầu dòng và danh sách có thứ tự; với danh sách không thứ tự gắn class
tree, có thể biểu diễn cấu trúc cây giống hệ thống tệp - Bảng được tự động điều chỉnh để khớp với lưới monospace và hoạt động responsive
- Tuy vậy, chỉ một cột được phép co giãn
- Biểu mẫu cũng nằm trong phạm vi hỗ trợ và được bố trí trên cùng lưới ký tự với các phần tử tiêu chuẩn khác
- Khi thêm class
gridvào container, các ô sẽ chia đều không gian theo chiều ngang- Do giữ đặc tính monospace, tổng chiều rộng có thể không phải lúc nào cũng đạt 100%
- Nếu muốn một ô cụ thể lấp đầy phần không gian còn lại, hãy đặt
flex-grow: 1;cho ô đó
- Có thể dùng thẻ
<pre>và box-drawing characters để vẽ hình kiểu ASCII- Có thể bọc trong
<figure>và<figcaption>để làm nổi bật hơn - Ví dụ bao gồm sơ đồ truyền thông điệp và biểu đồ cột
- Có thể bọc trong
- Cũng hỗ trợ đối tượng media như hình ảnh và video
- Chúng có thể mở rộng tới chiều rộng của trang, và phần đệm bên dưới sẽ được thêm vào để giữ lưới monospace
- Toàn bộ mã nguồn được công khai tại github.com/owickstrom/the-monospace-web
- Nguồn cảm hứng thiết kế đến từ U.S. Graphics Company
1 bình luận
Các ý kiến trên Hacker News
Tôi đang tổng hợp danh sách các trang dùng phông chữ đơn cách: https://wonger.dev/posts/monospace-dump#web. Hiện có khoảng 50 trang
Việc xử lý khoảng cách rất khó, và nếu từ bỏ phông chữ tỉ lệ thì cũng mất đi phần nào khả năng đọc
Tôi cho rằng kerning của phông chữ tỉ lệ tạo ra khác biệt lớn trong việc mắt nhận diện hình dạng của các cụm chữ
Văn bản đơn cách thì ổn ở những nơi có cấu trúc và tô sáng như trình soạn thảo mã, nhưng nên tránh dùng cho bài viết dài
Dù vậy, đặc biệt với biểu đồ Unicode và ASCII art thì nó thật sự rất đẹp
Ví dụ như
15 space, 1 V, 3 U, 1 V,15 space, 5 U,12 space, 2 x, 5 U, 2 x; sau khoảng 250 dòng thì một bức hình Jordan đang úp rổ hiện ra để có thể in raCó vẻ đây là đúng luồng để hỏi câu này. Vài năm trước tôi từng thấy một bài, có lẽ là hướng dẫn chơi video game, được viết để đọc bằng phông chữ đơn cách, và toàn bộ hàng nghìn dòng đều được căn đều hai bên hoàn hảo chỉ bằng cách chọn từ
Có ai biết đó là gì và có liên kết không?
[0] http://www.catb.org/esr/jargon/html/B/bricktext.html
Khá ngạc nhiên là khái niệm này gần như biến mất hoàn toàn khỏi kết quả tìm kiếm Google
https://github.com/laravel/laravel/blob/11.x/config/database...
Trong nhiều năm, tôi đã muốn làm một tiện ích mở rộng Visual Studio Code có thể căn đều chú thích trong khi gõ, bao gồm cả nối từ bằng dấu gạch nối, đồng thời cho phép thêm khoảng trắng khi cần
Ngoài việc tìm hiểu một số thuật toán và thư viện liên quan, tôi chưa bắt đầu được, vì trông nó khá phức tạp
Tôi đã thử dùng những thứ như
fmthaypar, nhưng cuối cùng đành chấp nhận rằng nếu không làm thủ công thì phải từ bỏ các chú thích được căn chỉnh đẹp; chỉ một thay đổi nhỏ thường kéo theo việc làm lại nhiều dòng, quá tốn thời gianTôi không muốn ngắt định danh dài ở giữa dòng nếu có thể tránh; lại còn phải xử lý danh sách lồng nhau, bảng, khối mã, ASCII art trong chú thích, phân biệt dấu gạch nối nằm trong từ với dấu gạch nối dùng để nối từ, cũng như các chú thích có cấu trúc như chú thích tài liệu XML hay thẻ Javadoc
Nhìn Badness 0 của Tom7, tôi cũng từng nghĩ có thể ném LLM vào, nhưng nếu cần chạy thời gian thực và không được có chú thích ảo giác thì tôi cho rằng nó vẫn chưa thực tế
Có chức năng nào như vậy đã tồn tại chưa, hoặc có nền tảng nào giúp việc viết tiện ích mở rộng này không biến thành công việc kéo dài cả năm không?
Bản thân đơn cách không làm tôi khó chịu
Điều gây khó chịu là ngắt dòng cưỡng bức
Có những trang web gọi là “retro” nhưng thực chất dùng thẻ
preTrên điện thoại, nó thành một bức tường chữ cỡ nhỏ, chế độ đọc không hoạt động, và nếu xoay ngang thì có thể có thanh cuộn, cũng có thể không
Gần như phàn nàn duy nhất của tôi về các mailing list kỹ thuật ngày nay cũng là ngắt dòng cưỡng bức và bố cục cứng nhắc
Trong một video tôi xem hôm nay, họ gọi thứ này là indie web; họ nói đó là triết lý phản đối thuật toán và đón nhận những thứ từng làm nên sự tuyệt vời của web ngày xưa
Những thứ như RSS, blog cá nhân, diễn đàn, webring
Tôi cũng tự bắt đầu một cái và cảm giác khá hay
Dễ nhìn, có tính ngữ nghĩa và responsive là những điểm tốt, nhưng về cơ bản phông chữ monospace không phù hợp lắm cho văn bản nội dung.
Tôi đã đọc các bài blog dùng thân bài monospace trên nhiều trang và cũng ổn, nhưng theo tôi thì dùng phông tỉ lệ mới là hướng đúng.
Tôi thấy kiểu này tốt hơn nhiều so với những trang “đẹp” cố tạo cảm giác như tạp chí in ngày xưa.
Blog của tôi dùng monospace vì thị lực tôi không tốt và tôi dùng thiết lập phóng to, nhưng tôi nghĩ khả năng tiếp cận rất quan trọng nên luôn thắc mắc lựa chọn nào dễ đọc hơn cho mọi người.
Không nói chuyện khác, riêng lớp CSS
tree ul-listthì tôi thấy tốt đến mức đáng được đưa vào đặc tả HTML như một thẻ. Đây là một thành phần cực kỳ hữu ích.Khoảng cách dòng quá hẹp, ảnh hưởng xấu đến khả năng đọc. Những đoạn văn dài dày đặc như thế này rất khó đọc.
Nhưng bảng và đồ họa ký tự lại cần khoảng cách dòng hẹp như vậy.
Vấn đề là dùng cùng một lưới ký tự cho cả đồ họa lẫn văn bản.
Có lẽ có thể giảm bớt bằng cách dùng một phông chữ có x-height đặc biệt thấp, để chừa thêm khoảng trắng trên dưới chữ.
Về chiều cao dòng thì tôi đồng ý. Cỡ chữ 16px mà line-height 19.2px thì chỉ 1,2 lần, quá bí. Tăng lên 24px sẽ cải thiện đáng kể.
Tuy nhiên mắt tôi không thấy chiều cao dòng lớn hơn ảnh hưởng đến bảng hay đồ họa ký tự. Thêm điều chỉnh này vào thì phong cách monospace vẫn trụ khá tốt.
Sửa: Tôi nghĩ mình hiểu ý chính rồi. Nó phá vỡ khái niệm lưới cố định của tác giả. Có thể kiểm chứng bằng cách đặt
line-height: 24pxcho phần tửprồi bật “debug mode” của tác giả để xem lưới.javascript: (function() {(function() {const textElements = document.querySelectorAll('p, span, h1, h2, h3, h4, h5, h6, li, td, th');textElements.forEach((element) => {const textColor = getComputedStyle(element).getPropertyValue('color');element.style.fontFamily = 'system-ui, -apple-system, sans-serif';element.style.WebkitTextStroke = \0.4px ${textColor}`;});location.hash = "";history.replaceState("", "", location.pathname);})();})();`https://caiorss.github.io/bookmarklet-maker/
Vì các từ trong monospace có “hình dạng” giống nhau hơn so với từ trong phông tỉ lệ.
OpenBSD đã bắt đầu đặt phông chữ console thành Spleen từ vài năm trước.
Tiếc là không có bản TrueType.
https://github.com/fcambus/spleen
Tài liệu C64 vẫn nổi tiếng hiện nay, gọi là VIC article, được cung cấp ở dạng monospace.
https://www.cebix.net/VIC-Article.txt
Vấn đề chính là đầu ra.
Bài này dùng các sơ đồ cần tham chiếu cố định trong không gian hai chiều, nên monospace ở đây rất quan trọng.
Đây là một trong những tài liệu tham khảo kỹ thuật quan trọng nhất về C64, và 99% hiệu ứng demo kỹ thuật đều có thể được phân rã thành các thủ thuật cơ bản trong đó.
Tôi đang nghĩ đến việc đổi phông chữ trên website cá nhân sang monospace.
Có ai biết phông monospace nào đặc biệt dễ đọc cho bài viết dài không?
Nếu có trên Google Fonts thì càng tốt.
Không có trên Google Fonts, nhưng miễn phí, hoặc bản phông biến thiên cũng rất rẻ.