Temas
Customize 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 afim de passar o tema para baixo na árvore de componentes, então você precisa ter certeza de que o ThemeProvider
é um pai 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 o tema do Material-UI com a solução de estilo ou quaisquer outros, pode ser conveniente adicionar variáveis adicionais ao tema, para que você possa usá-las em qualquer lugar. Por exemplo:
const theme = createTheme({
status: {
danger: orange[500],
},
});
Se você estiver usando TypeScript, você também deverá usar a extensão de módulos para que o tema aceite os valores acima.
declare module '@material-ui/core/styles' {
interface Theme {
status: {
danger: string;
};
}
// allow configuration using `createTheme`
interface ThemeOptions {
status?: {
danger?: string;
};
}
}
<ThemeProvider theme={theme}>
<CustomCheckbox defaultChecked />
</ThemeProvider>
Acessando o tema em um componente
Você pode acessar as variáveis do tema dentro de seus componentes React.
- material-ui-tema-editor: Uma ferramenta para gerar temas para seus aplicativos de Material-UI, basta selecionar as cores e ter uma visualização ao vivo. Inclui modelos de site básicos para mostrar vários componentes e como eles são afetados pelo tema
- create-mui-theme: É uma ferramenta online para criar temas de Material-UI por meio da ferramenta de cor do Material Design.
- Material palette generator: O gerador de paleta do Material pode ser usado para gerar uma paleta para qualquer cor que você inserir.
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 externo. 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
createTheme(options, ...args) => theme
Gere uma base de temas sobre as opções recebidas.
Argumentos
options
(object): Takes an incomplete theme object and adds the missing parts....args
(object[]): Deep merge the arguments with the about to be returned theme.
Retornos
theme
(object): A complete, ready-to-use theme object.
Exemplos
import { createTheme } from '@material-ui/core/styles';
import purple from '@material-ui/core/colors/purple';
import green from '@material-ui/core/colors/green';
const theme = createTheme({
palette: {
primary: {
main: purple[500],
},
secondary: {
main: green[500],
},
},
});
responsiveFontSizes(theme, options) => theme
Gera configurações de tipografia responsivas com base nas opções recebidas.
Argumentos
theme
(object): The theme object to enhance.options
(object [optional]):
breakpoints
(array<string> [optional]): Default to['sm', 'md', 'lg']
. Array de pontos de quebra (identificadores).disableAlign
(bool [optional]): Default tofalse
. 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 [optional]): Default to2
. 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): The new theme with a responsive typography.
Exemplos
import { createTheme, responsiveFontSizes } from '@material-ui/core/styles';
let theme = createTheme();
theme = responsiveFontSizes(theme);
unstable_createMuiStrictModeTheme(options, ...args) => theme
Usando unstable_createMuiStrictModeTheme
restringe o uso de alguns de nossos componentes.
Gera um tema que reduz a quantidade de avisos dentro de React.StrictMode
como por exemplo, Warning: findDOMNode is deprecated in StrictMode
.
Requisitos
Atualmente unstable_createMuiStrictModeTheme
não adiciona requisitos adicionais.
Argumentos
options
(object): Takes an incomplete theme object and adds the missing parts....args
(object[]): Deep merge the arguments with the about to be returned theme.
Retornos
theme
(object): A complete, ready to use theme object.
Exemplos
-function TabPanel(props) {
+const TabPanel = React.forwardRef(function TabPanel(props, ref) {
return <div role="tabpanel" {...props} ref={ref} />;
-}
+});
function Tabs() {
return <Fade><TabPanel>...</TabPanel></Fade>;
}