Giá trị của đơn vị css 'ex' là gì?


87

(Đừng nhầm với Xunit , một thư viện thử nghiệm đơn vị .Net phổ biến.)

Hôm nay trong cơn buồn chán, tôi bắt đầu kiểm tra DOM của Gmail (vâng, tôi rất chán).

Mọi thứ trông khá đơn giản cho đến khi tôi nhận thấy một thông số kỹ thuật thú vị về chiều rộng của các phần tử nhất định. Các Googlite lừng lẫy đã chỉ định một số cột bảng bằng cách sử dụng đơn vị 'ex' hiếm.

width: 22ex;

Lúc đầu, tôi cảm thấy bối rối ("'ex' là gì?"), Sau đó tôi quay lại: Tôi dường như nhớ ra điều gì đó từ nhiều năm trước khi lần đầu tiên tôi học về CSS. Từ thông số CSS3 :

[ Đơn vị cũ là] bằng chiều cao x đã sử dụng của phông chữ có sẵn đầu tiên . Chiều cao x được gọi như vậy vì nó thường bằng chiều cao của chữ "x" viết thường. Tuy nhiên, một 'ex' được xác định ngay cả đối với các phông chữ không chứa "x".

Tốt và tốt. Nhưng tôi chưa bao giờ thực sự thấy nó được sử dụng trước đây (bản thân tôi ít sử dụng nó hơn nhiều). Tôi sử dụng chúng khá phổ biến và đánh giá cao giá trị của chúng, nhưng tại sao lại là "ex"? Nó có vẻ ít tiêu chuẩn hơn một phép đo so với em và ít hữu ích hơn nhiều.

Một trong số ít trang mà tôi tìm thấy thảo luận về chủ đề này là http://www.xs4all.nl/~sbpoley/webmatters/emex.html của Stephen Poley . Stephen đưa ra những điểm tốt, tuy nhiên, cuộc thảo luận của anh ấy dường như không thuyết phục được tôi.

Vì vậy, câu hỏi của tôi là: Giá trị của đơn vị 'cũ' cho thiết kế web là gì?

(Câu hỏi này có thể được gắn thẻ chủ quan, nhưng tôi sẽ để quyết định đó cho những người có kinh nghiệm hơn bản thân tôi.)

Câu trả lời:


124

Nó rất hữu ích khi bạn muốn định kích thước một thứ gì đó liên quan đến chiều cao của các chữ cái thường trong văn bản của bạn. Ví dụ: hãy tưởng tượng làm việc trên một thiết kế như vậy:

văn bản thay thế


Trong kích thước kiểu chữ của thiết kế, chiều cao của các chữ cái có mối quan hệ không gian quan trọng với các yếu tố còn lại. Các dòng trong hình ảnh nguồn ở trên nhằm mục đích giúp chỉ ra chiều cao x của văn bản, nhưng chúng cũng cho thấy các nguyên tắc sẽ ở đâu nếu thiết kế xung quanh văn bản đó.

Như Jonathan đã chỉ ra trong các bình luận, ex chỉ đơn giản là phiên bản chiều cao của em (chiều rộng).


29
chỉ cần nói thêm, đó là chiều cao tương đương với việc sử dụng đơn vị 'em' cho chiều rộng
Jonathan Fingland

3
@Joel Tỉ lệ giữa chiều rộng của m và chiều cao của x đối với một phông chữ đã cho là bao nhiêu? Mặc dù nó là cố định, nó có thể rất khó tính toán, vì mọi phông chữ có một tỷ lệ khác nhau và tùy ý giữa m và x của nó. Vì vậy, khi thiết kế các yếu tố nên tương đối với loại, thay vì phải tự xác định tỷ lệ, bạn có thể dựa vào chiều cao x để giữ mọi thứ theo tỷ lệ.
Rex M

2
Một điểm khá bí truyền khác là theo Mozilla, Gecko có thể chia tỷ lệ các mục bằng exes chính xác hơn một chút so với sử dụng ems. Kích thước "không theo kiểu" mặc định của một em là 10.06667px trong khi kích thước của một ex là 6px. Điều này có nghĩa là khi mở rộng ems, Firefox phải làm tròn các pixel một phần thường xuyên hơn so với khi chia tỷ lệ exes.
benrifkah

1
Mặc dù nhìn chung không chính xác, nhưng sẽ hợp lệ khi tưởng tượng rằng 2ex có cùng kích thước với 1em (mặc dù chiều cao của chữ in hoa thường nhỏ hơn 1em). Thông số CSS thậm chí còn nêu rõ "không thể hoặc không thực tế khi xác định chiều cao x, giá trị 0,5em phải được giả định."
natevw

20
@JonathanFingland @RexM Không giống như trong in ấn typography, trong CSS, các emđơn vị không không đo chiều rộng - đó đo chiều cao của font. 1 emfont-sizegiá trị được tính toánfont-sizechỉ định "chiều cao mong muốn của glyph" . Vì vậy, cả hai emexđo chiều cao. ( chtuy nhiên, không đo chiều rộng.)
Rory O'Kane

19

Để trả lời câu hỏi, một cách sử dụng là với chỉ số trên và chỉ số dưới. Thí dụ:

sup {
    font-size: 75%;
    height: 0;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
    bottom: 1ex;
}

1
Tôi không nghĩ rằng điều đó thực sự giúp giải thích "người yêu cũ" là gì.
duskwuff -inactive-

11
Câu hỏi đặt ra là "Đơn vị 'cũ' cho vay thiết kế web có giá trị gì?". Không phải "đơn vị cũ là gì?" Joel thực hiện rất tốt việc xác định một đơn vị cũ trong câu hỏi ban đầu. Tôi đang cung cấp một ví dụ thực tế về cách bạn có thể sử dụng nó để định vị chỉ số trên.
jbs

1
Ví dụ thực tế tốt trực tiếp trả lời câu hỏi. Làm tốt.
Basil Bourque

2

Một điều khác cần xem xét ở đây là cách trang của bạn mở rộng quy mô khi người dùng tăng hoặc giảm kích thước phông chữ của họ (có thể sử dụng ctrl + con lăn chuột (cửa sổ)).

Tôi đã sử dụng em với .. padding-left: 2 em; padding-right: 2 em;

và ex có padding-bottom: 2 ex; padding-top: 2 ex;

Do đó, sử dụng đơn vị đo dọc cho thuộc tính tỷ lệ theo chiều dọc và đơn vị đo ngang cho thuộc tính tỷ lệ theo chiều ngang.


5
Cả em và ex đều là đơn vị thẳng đứng, vì chúng được định nghĩa là chiều cao của chữ hoa "M" và chữ thường "x" tương ứng. Cả hai đều có thể được sử dụng cho chiều dài dọc và ngang.
JacquesB

Thêm vào đó, chlà một đơn vị ngang đo chiều rộng của chữ số 0 ("0").
Matt F.

1

Giá trị của việc có nó trong thông số kỹ thuật CSS, nếu đó là những gì bạn thực sự yêu cầu, chính xác giống như giá trị của việc có đơn vị em.

Nó cho phép bạn đặt phông chữ thành kích thước tương đối .

Bạn không biết kích thước phông chữ cơ bản của tôi là gì. Vì vậy, một chiến lược tốt cho thiết kế web là đặt kích thước phông chữ tương đối, thay vì tuyệt đối; tương đương với "gấp đôi kích thước bình thường của bạn" hoặc "nhỏ hơn một chút so với kích thước bình thường của bạn" thay vì một kích thước cố định như "mười pixel".


Tôi đồng ý với điều này. Nhưng thông số kỹ thuật em không đủ cho điều này và đáng tin cậy hơn?
Joel

@JoelPotter có, nhưng chỉ cho chiều rộng; đối với chiều cao, exdường như là tương đương.
ANeves nghĩ SE là ác

5
@ANeves Không chính xác. Trong CSS, em là chiều cao của phông chữ (xấp xỉ), không phải chiều rộng . Trong kiểu chữ in, ý tưởng về một dấu em đến từ chiều rộng của một chữ hoa M. Nhưng CSS đã được tinh chỉnh em. Xem Wikipedia .
Basil Bourque

2
Nếu bạn muốn chiều rộng, hãy sử dụng chđơn vị như đã đề cập trong một câu trả lời khác.
Basil Bourque

1

Lưu ý rằng, các thuật ngữ như "khoảng cách dòng đơn / đôi" thực sự có nghĩa là độ lệch giữa hai dòng liền kề, được đo bằng em . Vì vậy "khoảng cách dòng kép" có nghĩa là mỗi dòng có chiều cao là 2 em .

Do đó, nếu bạn muốn chỉ định khoảng cách dọc tỷ lệ với "lines", hãy sử dụng em. Chỉ sử dụng ex nếu bạn muốn chiều cao thực tế của chữ thường, tôi dám khẳng định là một trường hợp hiếm hơn nhiều.

CẬP NHẬT: Tiêu chuẩn web cho phép trình duyệt sử dụng 0,5em như cũ hoặc bắt nguồn từ phông chữ.

Tuy nhiên, không có cách nào để nhúng bất kỳ thông tin "x-height" vào phông chữ (OpenType hoặc webfont) một cách đáng tin cậy.

Do đó, khả năng trước đây làm cho đơn vị cũ dư thừa, và khả năng sau thiếu bất kỳ phương tiện đáng tin cậy nào để xảy ra. Và thực tế là có thể làm cho nó thậm chí còn ít đáng tin cậy hơn.

Vì vậy, tôi lập luận cho việc thiếu giá trị của đơn vị cũ.


Câu hỏi này đặc biệt yêu cầu giá trị của nó, không phải ý nghĩa của nó.
Matt F.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.