Tipografia
O módulo Sass Ignite UI for Angular Typography permite que você modifique a tipografia de todos os componentes do seu aplicativo, escala tipográfica específica ou componentes específicos.
Visão geral
Um aplicativo pode definir várias scales
tipográficas que podem compartilhar categorias de escala entre si. Uma scale category
é um conjunto de type styles
, contendo informações sobre font-family
, font-size
, font-weight
, line-height
, letter-spacing
e text-transform
.
Ignite UI for Angular expõe 4 escalas de tipo padrão para cada um de seus temas -$material-type-scale
, $fluent-type-scale
, $bootstrap-type-scale
e $indigo-type-scale
, que são por sua vez usados pelo mixin de typography
para definir os estilos de tipografia. No entanto, você pode criar escalas de tipo adicionais.
Em muitos casos, você só precisaria fazer pequenas modificações na tipografia, portanto, é recomendado que você leia a seção Tipografia da documentação de Variáveis CSS primeiro, se ainda não o fez. Usar o Sass para modificar a tipografia só é necessário se você quiser fazer mudanças mais profundas referentes a toda a escala tipográfica.
Usage
Important
Por padrão, não aplicamos nenhum estilo de tipografia. Para usar nossa tipografia em seu aplicativo, você precisa definir a classe CSS ig-typography
em um elemento de nível superior e incluir o mixin de typography
em seu arquivo base.scss
.
Selecionamos Titillium Web para ser a fonte padrão no tema Material para Ignite UI for Angular. Para usá-lo, você precisa hospedá-lo você mesmo, ou incluí-lo do Google Fonts:
<link href="https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700" rel="stylesheet"/>
Existem vários mixins e funções que são usados para definir e recuperar estilos de categoria para/de uma escala de tipo. São eles:
type-style
[função] - Retorna um conjunto de regras de estilo a serem usadas por uma categoria de escala de tipo.type-scale
[função] - Retorna um conjunto de 13 categorias de estilo.type-scale-category
[função] - Retorna um mapa de regras de estilo de uma escala de tipo e categoria.type-style
[mixin] - Adiciona regras de estilo a um seletor de uma escala de tipo e categoria específica.type-style-vars
[mixin] - Adiciona regras de estilo a um seletor de um estilo de tipo específico.typography
[mixin] - Define os estilos de tipografia do aplicativo global.
Vamos dar uma olhada mais de perto no que cada um dos mixins e funções mencionados acima fazem.
The Type Style
A função type-style
é uma função semelhante a uma interface que simplesmente garante que certos argumentos sejam passados como parte do conjunto de estilos para uma categoria de escala. Digamos, por exemplo, que queremos definir um novo conjunto de regras de estilo para a categoria de escala h1
. Para fazer isso, poderíamos simplesmente escrever:
$h1-style: type-style(
$font-size: rem(112px),
$font-weight: 600,
$line-height: rem(96px),
...,
);
The Type Scale
A escala de tipo produz um mapa de 13 estilos de tipografia usados como categorias de escala. Para gerar uma nova escala de tipo, faça o seguinte:
$my-type-scale: type-scale(...);
Important
Você precisa fornecer um estilo de tipo para cada uma das 13 categorias de escala. Um estilo pode ser gerado usando a função type-style
como mostrado acima.
$my-type-scale: type-scale(
$h1: $h1-style,
[$h2...$overline],
);
Você pode modificar uma escala de tipo existente estendendo-a. Para alterar o estilo de tipo h1
do $material-type-scale
você pode fazer:
$my-type-scale: extend(
$material-type-scale,
(
h1: type-style(...),
)
);
Adicionar estilos de tipo adicionais a uma escala é igualmente fácil:
$my-type-category: type-style(
$font-weight: 600,
$font-size: rem(42px),
$text-transform: uppercase,
...,
);
$my-type-scale: extend(
$my-type-scale,
(
"my-category": $my-type-category,
)
);
The Typography Mixin
O mixin de tipografia define os estilos de tipografia globais para um aplicativo, incluindo como os elementos nativos h1-h6 e p são estilizados.
Atualmente, ele aceita 2 argumentos:
$font-family
- A família de fontes global a ser usada pelo aplicativo.$type-scale
- A escala de tipo padrão a ser usada pelo aplicativo.
Para usar os estilos de tipografia, inclua o mixin de typography
em qualquer lugar depois do core
. Vamos aproveitar a escala de tipo $my-type-scale
que definimos acima e torná-la a escala de tipo padrão.
@include typography(
$font-family: $material-typeface,
$type-scale: $my-type-scale
);
Expomos quatro variáveis para tipo de letra, semelhantes a type-scale -$material-typeface
, $fluent-typeface
, $bootstrap-typeface
e $indigo-typeface
. Você pode usar qualquer uma delas em combinação com qualquer type-scale ao incluir o mixin typography
.
Custom Type Styles
O mixin type-style
pode ser usado para recuperar as regras de estilo para uma categoria de escala de uma escala de tipo específica. Além disso, ele permite que você adicione regras de estilo adicionais.
.my-fancy-h1 {
@include type-style('h1') {
color: royalblue;
}
}
O código acima produzirá um seletor de estilo de classe.my-fancy-h1
, que contém todas as regras de estilo para a categoria de escala h1
de $my-type-scale
com a adição da propriedade color
definida para a cor royalblue
. Agora, se você definir a classe de qualquer elemento para.my-fancy-h1
, ele se parecerá com qualquer outro elemento h1
, mas também será royalblue
na cor.
Component Typography
A maioria dos componentes no Ignite UI for Angular usa categorias de escala para estilizar o texto. Por exemplo, o componente igx-card
usa as seguintes categorias de escala:
h6
- usado para estilizar o título do cartão.subtitle-2
- usado para estilizar legendas de cartões e títulos pequenos.body-2
- usado para estilizar o conteúdo do texto do cartão.
Há duas maneiras de alterar os estilos de texto de um card. A primeira é modificando as escalas h6
, subtitle-2
e/ou body-2
na escala do tipo de material que passamos para o mixin de tipografia. Então, se quiséssemos tornar o título de um card menor, tudo o que temos a fazer é alterar o font-size da categoria de escala h6
.
// Create a custom h6 scale category style
$my-h6: type-style(
$font-size: rem(12px),
);
// Create a custom type scale with the modified h6
$my-type-scale: extend(
$material-type-scale,
(
h6: $my-h6,
)
);
// Pass the custom scale to the global typography mixin
@include typography($type-scale: $my-type-scale);
Warning
O código acima modificará a categoria de escala h6
globalmente, o que afetará a aparência de todos os componentes que usam a escala h6
. Isso é feito para consistência, para que todos os elementos h6
tenham a mesma aparência em seu aplicativo. Entendemos que você pode querer aplicar a modificação para h6
apenas a componentes específicos, como o componente igx-card
em nosso caso. É por isso que cada componente tem seu próprio mixin de tipografia, que aceita uma configuração de categoria.
// Create a custom h6 scale category style
$my-h6: type-style(
$font-size: rem(12px),
);
// You can specify which categories from the type sale the card uses
$card-categories: (
title: 'h6',
title-small: 'subtitle-1',
subtitle: 'subtitle-2',
content: 'body-2',
);
.my-cool-card {
// Overwrite the 'h6' type style for this scope
@include type-style-vars('h6', $my-h6);
// Pass the custom card catergories to the card typography mixin
@include card-typography($card-categories);
}
Não incluímos mais o mixin typography
passando a ele a escala $my-type-scale
com nossa modificação para a categoria h6
. Agora, tudo o que fazemos é passar o estilo h6 personalizado que criamos para o mixin type-style-vars
.
Usando o mixin card-typography, podemos atualizar os estilos de tipografia para todos os elementos no componente card. No exemplo acima, a chave title-small no mapa $card-categories é atribuída ao estilo de tipo subtitle-1. Essa alteração torna o título pequeno no card um pouco maior. Por padrão, o componente card usa o estilo de tipo subtitle-2 para o título pequeno, que tem um tamanho de fonte menor que o subtitle-1. O mixin nos permite substituir esse padrão e aplicar o novo estilo.
Converting Units
Também temos três funções de tipografia para converter unidades de propriedade. Com as funções, podemos converter unidades px
para em
ou rem
, e também unidades em
ou rem
para px
. Tudo o que precisamos fazer é chamar uma das três funções e passar um valor que queremos converter.
To 'px'
.my-component {
margin: px(3.23rem);
}
To 'rem'
.my-component {
margin: rem(10px) rem(5px);
}
To 'em'
.my-component {
margin: em(10px) em(5px);
}
É importante lembrar que, ao converter um valor, a conversão é baseada em um tamanho de fonte base padrão de 16px (onde 16px = 1em/rem). Se quisermos, podemos fornecer um tamanho de fonte base personalizado como um argumento para a função de conversão. Isso garantirá que o valor resultante seja calculado em relação ao tamanho de fonte base especificado.
.my-component {
margin: rem(10px, 26px);
// The result will be 0.385rem
}
Isso converterá o valor de 10px para rem, com base no tamanho de fonte de 26px.
CSS Classes
Além de adicionar estilos de texto para todos os componentes com base em categorias de escala de tipo, também estilizamos os elementos padrão h1-h6 e p. Isso nos permite separar a semântica do estilo. Então, por exemplo, mesmo que a tag h1
tenha algum estilo padrão que fornecemos ao usar typography
, você pode modificá-la para se parecer com um h3
dando a ela uma classe de ig-typography__h3
.
<h1 class="ig-typography__h3">Some text</h1>
Aqui está uma lista de todas as classes CSS que fornecemos por padrão:
ig-typography__h1
ig-typography__h2
ig-typography__h3
ig-typography__h4
ig-typography__h5
ig-typography__h6
ig-typography__subtitle-1
ig-typography__subtitle-2
ig-typography__body-1
ig-typography__body-2
ig-typography__button
ig-typography__caption
ig-typography__overline