Temas
Personalize Material-UI com seu tema. Você pode mudar as cores, a tipografia e muito mais.
O tema especifica a cor dos componentes, o escurecimento das superfícies, o nível de sombra, a opacidade apropriada dos elementos de tinta, etc.
Temas permitem que você aplique um tom consistente na sua aplicação. Ele permite que você customize todos os aspectos do design do seu projeto, para atender as necessidades específicas do seu negócio ou marca.
Para promover uma maior consistência entre os aplicativos, os temas claro e escuro estão disponíveis para escolha. Por padrão, os componentes usam o tema claro.
Provedor de Temas
Se você deseja personalizar o tema, você precisa usar o ThemeProvider
componente para injetar um tema em sua aplicação. No entanto, isso é opcional; Material-UI componentes vêm com um tema padrão.
O ThemeProvider
depende do recurso de contexto do React para passar o tema para os componentes, então você precisa ter certeza de que ThemeProvider
é um pai (parent) dos componentes que você está tentando customizar. Você pode aprender mais sobre isso lendo a sessão da API.
Variáveis de configuração do tema
Alterar as variáveis de configuração do tema é a maneira mais eficaz de combinar o Material-UI às suas necessidades. As seções a seguir abordam as variáveis mais importantes do tema:
Você pode conferir a seção de tema padrão para visualizar o tema padrão na íntegra.
Variáveis customizáveis
Ao usar Material-UI com a solução de estilo ou quaisquer outras, surgem algumas necessidades de customização. Pode ser conveniente adicionar variáveis adicionais ao tema para que você possa usá-las em todos os lugares. Por exemplo:
<ThemeProvider theme={theme}>
<CustomCheckbox />
</ThemeProvider>
Acessando o tema em um componente
Você pode acessar as variáveis do tema dentro de seus componentes React.
Aninhando o tema
Você pode aninhar vários provedores de tema.
<ThemeProvider theme={outerTheme}>
<Checkbox defaultChecked />
<ThemeProvider theme={innerTheme}>
<Checkbox defaultChecked />
</ThemeProvider>
</ThemeProvider>
O tema interno sobrescreverá o tema exterior. Você pode estender o tema externo fornecendo uma função:
Uma nota sobre desempenho
As implicações de desempenho de aninhamento do componente ThemeProvider
, estão ligados a forma como o JSS trabalha nos bastidores. O principal ponto a ser entendido é que o CSS injetado é armazenado em cache com a seguinte tupla (styles, theme)
.
theme
: Se você fornecer um novo tema em cada renderização, um novo objeto CSS será computado e injetado. Tanto para consistência quanto desempenho da UI, é melhor renderizar um número limitado de objetos de tema.styles
: Quanto maior é o objeto de estilos, mais trabalho é necessário.
API
createMuiTheme(options, ...args) => theme
Gere uma base de temas sobre as opções recebidas.
Argumentos
options
(Object): Recebe um objeto de tema incompleto e adiciona as partes ausentes....args
(Array): Deep merge the arguments with the about to be returned theme.
Retornos
theme
(Object): Um objeto de tema completo, pronto para uso.
Exemplos
import { createMuiTheme } from '@material-ui/core/styles';
import purple from '@material-ui/core/colors/purple';
import green from '@material-ui/core/colors/green';
const theme = createMuiTheme({
palette: {
primary: purple,
secondary: green,
},
status: {
danger: 'orange',
},
});
responsiveFontSizes(theme, options) => theme
Gera configurações de tipografia responsivas com base nas opções recebidas.
Argumentos
theme
(Object): O objeto de tema a ser aplicado as alterações.options
(Object [opcional]):
breakpoints
(Array<String> [optional]): Default to['sm', 'md', 'lg']
. Array de pontos de quebra (identificadores).disableAlign
(Boolean [opcional]): Padrãofalse
. Se os tamanhos de fonte mudam pouco, as alturas da linha são preservadas e alinhadas à altura da linha da grade em 4px do Material Design. Isso requer uma altura de linha sem unidade nos estilos do tema.factor
(Number [opcional]): Padrão2
. Este valor determina o fator de redimensionamento do tamanho da fonte. Quanto maior o valor, menor a diferença entre tamanhos de fonte em telas pequenas. Quanto menor o valor, maiores os tamanhos de fonte para telas pequenas. O valor deve ser maior que 1.variants
(Array<String> [optional]): Default to all. As variantes de tipografia para manipular.
Retornos
theme
(Object): O novo tema com uma tipografia responsiva.
Exemplos
import { createMuiTheme, responsiveFontSizes } from '@material-ui/core/styles';
let theme = createMuiTheme();
theme = responsiveFontSizes(theme);