Bỏ qua tới nội dung

Nền tảng

Kích thước

Đã đặc tả

Mười token kích thước nền tảng. Bốn chiều cao control — 32, 36, 40, 44 — nhưng chỉ ba bậc lộ ra cho tác giả, và hai chiều cao hàng 40, 48. touchTarget là 44 và nó là sàn của vùng chạm, không phải một chiều cao: sau DS-017 clause 6 nó và chiều cao control không còn là cùng một loại đại lượng. Hai trục độc lập: size của Button và density của một vùng.

Token

Mười token

TokenGiá trị
--nf-foundation-size-control-xsUnknown
--nf-foundation-size-control-smUnknown
--nf-foundation-size-control-mdUnknown
--nf-foundation-size-control-lgUnknown
--nf-foundation-size-compact-rowUnknown
--nf-foundation-size-comfortable-rowUnknown
--nf-foundation-size-touch-targetUnknown
--nf-foundation-size-iconUnknown
--nf-foundation-size-icon-smallUnknown
--nf-foundation-size-focus-offsetUnknown

controlXs 32px phục vụ đúng một vai — hàng trong danh sách overlay ở compact — và không có API nào lộ nó cho tác giả. touchTarget và controlLg cùng là 44px và đó không còn là trùng lặp: sau DS-017 clause 6 chúng thậm chí không còn so sánh được với nhau. controlLg là chiều cao của một hộp; touchTarget là cạnh nhỏ nhất của vùng chạm, thứ được mở rộng bằng một lớp phủ chứ không bằng cách phóng to hộp.

Render

Ba chiều cao control cạnh nhau, ở cả hai density

Ba size thật của Button, đặt trong hai ThemeScope mật độ khác nhau. sm và lg là hai mỏ neo cố định; chỉ md trượt — ở compact, md hội tụ với sm về 36px, còn lg vẫn tách 44px. Chiều cao thị giác không đổi theo loại con trỏ ở cả ba size, kể cả sm: vùng chạm mở ra 44px bằng một lớp phủ vô hình, không bằng cách phóng to hộp.

nexoframe · light · comfortable

nexoframe · light · compact

Hai trục

size của Button và density của vùng

size của Buttondata-nexo-density
Phạm vimột controlmột vùng và mọi thứ trong nó
Ai đặttác giả của control đótổ tiên: theme root, hoặc thân bảng
Nói gì"hành động này quan trọng cỡ này""vùng này ưu tiên thấy nhiều dòng"
Có bị con trỏ thô ghi đèkhông đổi chiều cao; vùng chạm mở ra 44pxkhông đổi, trừ ba vai ở bảng dưới

Hai trục không thay nhau được. Một nút lg trong một vùng compact vẫn là nút lớn nhất của vùng đó — sm và lg là hai mỏ neo cố định, chỉ md trượt. Nếu density san bằng cả ba size thì tác giả mất cách nói "hành động này quan trọng hơn" trong đúng những vùng dày đặc nơi điều đó cần nhất.

Token

Bảng remap theo density

Vai tròcomfortablecompactToken nền tảng
Button sm36px36pxcontrol-sm ở cả hai
Button md40px36pxcontrol-md / control-sm
Button lg44px44pxcontrol-lg ở cả hai
Ô nhập40px36pxcontrol-md / control-sm
Tab40px36pxcontrol-md / control-sm
Hàng menu36px32pxcontrol-sm / control-xs
Hàng bảng48px40pxcomfortable-row / compact-row
Accordion trigger48px44pxcomfortable-row / control-lg
Kiểu chữ controltypography-ui-*typography-caption-*—

sm và lg là hai mỏ neo cố định; chỉ md trượt. Ở compact, sm và md hội tụ về 36px — chủ ý: trong một vùng đã dày đặc, "phụ" và "mặc định" nên cùng chiều cao, thứ phân biệt chúng là kiểu chữ (caption so với ui) và đệm (12px so với 16px), không phải kích thước.

Con trỏ thô

Ba ngoại lệ, và một công thức

Lớp phủ vùng chạm chỉ hợp lệ khi control có khoảng trống thật ≥ (44 − chiều cao) / 2 ở mỗi phía. Một Button 36px đứng cạnh nhau với khe space-2 (8px) cần 4px mỗi phía — vừa đủ, và hai vùng chạm chạm nhau mà không chồng. Đó cũng là lý do thang dừng ở bậc 32 và không đi thấp hơn: 36 + 4 + 4 = 44 ăn khớp với khe mặc định, còn một bậc 28px sẽ cần khe ≥ 16px và đẻ ra một luật khoảng cách riêng.

Ba vai xếp chồng khoảng cách 0 nên không có chỗ cho lớp phủ, và chúng phải cao thật ở con trỏ thô:

Vaicoarse
Hàng menu44px
Hàng bảng48px
Accordion trigger48px

Hệ quả nhìn thấy được: trên tablet, menu và bảng dài ra trong khi nút và ô nhập thì không. Đó là kết quả đúng — bấm nhầm một mục trong menu là lỗi tệ hơn hẳn một menu hơi thô.

Chi tiết

focusOffset — token nhỏ nhất và hay bị bỏ qua nhất

--nf-foundation-size-focus-offset là 2px. Ring tiêu điểm cách phần tử 2px thay vì dán sát, để nó đọc ra là một ring, không phải một viền dày hơn.

Quy tắc

Do / Don't

DoDon'tVì sao
Bind --nf-component-button-height từ primitiveBind --nf-foundation-size-control-* từ primitive hay từ màn hìnhAlias component là chỗ density remap; bind nền tảng là thoát khỏi density. infra/check-control-heights.mjs chặn
Dùng md cho gần như mọi nútDùng lg cho mọi hành động chínhNếu mọi thứ là lg thì không gì là chính
Dùng sm trong hàng bảngDùng sm để nhồi thêm nút vào một thanh chậtThanh chật là vấn đề layout; sm không sửa được nó và làm đích nhỏ hơn
Để lớp phủ lo sàn chạmGhi đè @media (pointer: coarse) để lấy lại layout dàyPhần Never của A11 không đổi sau DS-017
Bind --nf-foundation-size-touch-target khi ý là một sànBind nó khi ý là một chiều caoSau DS-017 clause 6 đây là hai loại đại lượng khác nhau. pagination.tsx bind nó đúng
Đặt density lên một vùngTruyền một prop density xuống từng componentA12: density thuộc về vùng

Chưa quyết

Open questions

QuestionOwnerResolves when
Có size thứ tư cho Button không?nexoboxvn@gmail.comMột bề mặt sản phẩm cần nó. controlXs 32px tồn tại nhưng không trả lời câu này — nó không có API
touchTarget và chiều cao mặc định có nên tách giá trị không?—Đóng 2026-09-25 theo DS-017 clause 6. Chúng không còn cùng loại đại lượng: một cái là cạnh của vùng chạm, cái kia là chiều cao của hộp
Hàng bảng có cần bậc thứ ba cho hàng có hai dòng chữ không?nexoboxvn@gmail.comMột bảng thật có hàng hai dòng
Sau DS-017, bậc cao nhất của thang bằng đúng sàn chạm. Một bề mặt cần nút cao hơn 44px thì lấy ở đâu?nexoboxvn@gmail.comMột bề mặt nêu nhu cầu. Đây là khả năng mà DS-017 đóng lại khi bỏ bậc 52
NexoFrame — design catalogue