Qual é o valor da unidade css 'ex'?

87

(Não deve ser confundido com Xunit , uma popular biblioteca de teste de unidade .Net.)

Hoje, em um ataque de tédio, comecei a inspecionar o DOM do Gmail (sim, eu estava muito entediado).

Tudo parecia muito simples até que notei uma especificação interessante sobre as larguras de certos elementos. O ilustre Googlites havia especificado uma série de colunas de mesa usando a rara unidade 'ex'.

width: 22ex;

No começo fiquei perplexo ("o que é um 'ex'?"), Então me lembrei: pareço me lembrar de algo de anos atrás, quando estava aprendendo CSS. Das especificações CSS3 :

[A unidade ex é] igual à altura x usada da primeira fonte disponível . A altura x é assim chamada porque geralmente é igual à altura do "x" minúsculo. No entanto, um 'ex' é definido mesmo para fontes que não contêm um "x".

Bem e bom. Mas eu nunca vi isso ser usado antes (muito menos usei eu mesmo). Eu uso ems com bastante frequência e aprecio seu valor, mas por que o "ex"? Parece uma medida muito menos padrão do que o em, e muito menos útil.

Uma das poucas páginas que encontrei discutindo esse tópico é o http://www.xs4all.nl/~sbpoley/webmatters/emex.html de Stephen Poley . Stephen faz bons pontos, no entanto, sua discussão parece inconclusiva para mim.

Portanto, minha pergunta é: qual o valor que a unidade 'ex' empresta ao web design?

(Esta pergunta pode ser considerada subjetiva, mas deixarei essa decisão para pessoas mais experientes do que eu.)

Joel
fonte

Respostas:

124

É útil quando você deseja dimensionar algo em relação à altura das letras minúsculas do seu texto. Por exemplo, imagine trabalhar em um design assim:

texto alternativo


Na dimensão tipográfica do design, a altura das letras tem relações espaciais importantes com o resto dos elementos. As linhas na imagem de origem acima têm o objetivo de ajudar a apontar a altura x do texto, mas também mostram onde estariam as diretrizes se o projeto fosse feito em torno desse texto.

Como Jonathan apontou nos comentários, ex é simplesmente a versão em altura de em (largura).

Rex M
fonte
29
só para adicionar, é a altura equivalente a usar a unidade 'em' para largura
Jonathan Fingland
3
@Joel Qual é a proporção entre a largura de m e a altura de x para uma determinada fonte? Mesmo que seja fixo, pode ser potencialmente muito difícil de calcular, porque cada fonte tem uma proporção diferente e arbitrária entre seu m e seu x. Portanto, ao projetar elementos que devem ser relativos ao tipo, em vez de ter que determinar a proporção sozinho, você pode contar com a altura x para manter as coisas em proporção.
Rex M
2
Outro ponto bastante esotérico é que, de acordo com Mozilla, o Gecko pode dimensionar itens usando exes com um pouco mais de precisão do que aqueles que usam ems. O tamanho padrão "sem estilo" de um em é 10.06667px, enquanto o tamanho de um ex é 6px. Isso significa que, ao dimensionar o ems, o Firefox precisa arredondar pixels parciais com mais freqüência do que ao dimensionar exes.
Benrifkah 05 de
1
Embora não seja geralmente correto, é válido imaginar que 2ex tem aproximadamente o mesmo tamanho que 1em (embora a altura de uma letra maiúscula normalmente seja um pouco menor que 1em). A especificação CSS ainda afirma "onde é impossível ou impraticável determinar a altura x, um valor de 0,5em deve ser assumido."
natevw
20
@JonathanFingland @RexM Ao contrário da tipografia impressão, em CSS, a emunidade se não medir uma largura - que mede a altura da fonte. 1 emé o font-sizevalor calculado e font-sizeespecifica “a altura desejada dos glifos” . Portanto, ambos eme exmedem uma altura. ( chno entanto, mede uma largura.)
Rory O'Kane
19

Para responder à pergunta, um uso é sobrescrito e subscrito. Exemplo:

sup {
    font-size: 75%;
    height: 0;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
    bottom: 1ex;
}
jbs
fonte
1
Não acho que isso realmente ajude a explicar o que é um "ex".
duskwuff -inactive-
11
A questão é "Qual o valor que a unidade 'ex' empresta ao web design?". Não "o que é uma unidade ex?" Joel faz um ótimo trabalho ao definir uma unidade ex na questão original. Estou fornecendo um exemplo prático de como você pode usá-lo para posicionar um sobrescrito.
jbs de
1
Bom exemplo prático que responde diretamente à pergunta. Bem feito.
Basil Bourque
2

Outra coisa a considerar aqui é como sua página é dimensionada quando um usuário aumenta ou diminui o tamanho da fonte (talvez usando ctrl + roda do mouse (janelas)).

Eu os usei com .. padding-left: 2 em; padding-right: 2 em;

e ex com fundo acolchoado: 2 ex; tampo de enchimento: 2 ex;

Assim, usando uma unidade de medida vertical para uma propriedade de dimensionamento vertical e uma unidade de medida horizontal para uma propriedade de dimensionamento horizontal.


fonte
5
Ambos em e ex são unidades verticais, uma vez que são definidas como a altura da maiúscula "M" e minúscula "x" respectivamente. Ambos podem ser usados ​​para comprimentos verticais e horizontais.
JacquesB
Para adicionar a isso, ché uma unidade horizontal medindo a largura do numeral zero ("0").
Matt F.
1

O valor de tê-lo na especificação CSS, se é isso que você está realmente perguntando, é exatamente o mesmo que o valor de ter a unidade em.

Ele permite que você defina as fontes para tamanhos relativos .

Você não sabe qual é o tamanho da minha fonte básica. Portanto, uma boa estratégia para web design é definir tamanhos de fonte que sejam relativos, em vez de absolutos; o equivalente a "o dobro do tamanho normal" ou "um pouco menor que o tamanho normal", em vez de um tamanho fixo como "dez pixels".

AmbroseChapel
fonte
Eu concordo com isto. Mas não é a especificação em suficiente para isso e mais confiável?
Joel
@JoelPotter sim, mas apenas para larguras; para alturas, o exparece ser o equivalente.
ANeves pensa que SE é o mal
5
@ANeves Incorreto. Em CSS, um em é a altura de uma fonte (aproximadamente), não a largura . Na tipografia impressa, a ideia de um em veio da largura de uma caixa alta M. Mas CSS refinado em. Veja a Wikipedia .
Basil Bourque
2
Se quiser largura, use a chunidade mencionada em outra resposta.
Basil Bourque
1

Observe que termos como "espaçamento de linha simples / dupla" na verdade significam o deslocamento entre duas linhas adjacentes, medido por em . Portanto, "espaçamento de linha duplo" significa que cada linha tem uma altura de 2 em .

Portanto, se você quiser especificar uma distância vertical que seja proporcional às "linhas", use em. Só use ex se quiser a altura real da letra minúscula, o que é, ouso dizer, um exemplo muito mais raro.

ATUALIZAÇÃO: O padrão da web permite que o navegador use 0.5em como ex ou derivar da fonte.

No entanto, não há como incorporar de forma confiável qualquer informação de "altura x" em uma fonte (OpenType ou webfont).

Conseqüentemente, a primeira possibilidade torna a ex-unidade redundante, e a última carece de qualquer meio confiável para acontecer. E o fato de ser possível torna-o ainda menos confiável.

Assim, defendo a falta de valor da ex-unidade.

Yì Yáng
fonte
Esta questão pede especificamente seu valor, não seu significado.
Matt F.