Button
Botões permitem que os usuários tomem ações e decisões com um simples toque.
Botões comunicam ações que os usuários podem realizar. Eles são normalmente colocados em toda a interface do usuário, em lugares como:
- Janelas modais
- Formulários
- Cartões
- Barras de ferramentas
<Button variant="text">Text</Button>
<Button variant="contained">Contained</Button>
<Button variant="outlined">Outlined</Button>
Botões de texto
Text buttons are typically used for less-pronounced actions, including those located: in dialogs, in cards. Em cartões, os botões de texto ajudam a manter a ênfase no conteúdo do cartão.
<Button>Primary</Button>
<Button disabled>Disabled</Button>
<Button href="#text-buttons">Link</Button>
Botões contidos
Botões Contidos tem alta ênfase, distinguem-se pelo uso de elevação e preenchimento. Eles contém as principais ações da sua aplicação.
<Button variant="contained">Contained</Button>
<Button variant="contained" disabled>
Disabled
</Button>
<Button variant="contained" href="#contained-buttons">
Link
</Button>
Você pode remover a elevação com a propriedade disableElevation
.
<Button variant="contained" disableElevation>
Disable elevation
</Button>
Botões delineados
Outlined buttons are medium-emphasis buttons. They contain actions that are important but aren't the primary action in an app.
Botões delineados são uma alternativa de menor ênfase comparado com botões contidos, ou uma uma alternativa de maior ênfase comparado com botões de texto.
<Button variant="outlined">Primary</Button>
<Button variant="outlined" disabled>
Disabled
</Button>
<Button variant="outlined" href="#outlined-buttons">
Link
</Button>
Manipulando cliques
Todos os componentes aceitam um método manipulador onClick
que é aplicado ao elemento DOM raiz.
<Button
onClick={() => {
alert('clicado');
}}
>
Clique aqui
</Button>
Note que a documentação evita mencionar as propriedades nativas (existem várias) na seção de API dos componentes.
Cor
<Button color="secondary">Secondary</Button>
<Button variant="contained" color="success">
Success
</Button>
<Button variant="outlined" color="error">
Error
</Button>
Além de usar as cores de botão padrão, você pode adicionar outras personalizadas ou desativar as que não forem necessárias. See the Adding new colors example for more info.
Tamanhos
For larger or smaller buttons, use the size
prop.
<Button variant="contained" component="label">
Upload
<input hidden accept="image/*" multiple type="file" />
</Button>
<IconButton color="primary" aria-label="upload picture" component="label">
<input hidden accept="image/*" type="file" />
<PhotoCamera />
</IconButton>
Botões com ícones e rótulo
Às vezes você pode querer ter ícones para certos botões para aprimorar a experiência do usuário, pois reconhecem logotipos mais facilmente do que texto. Por exemplo, se você tem um botão com a ação de "deletar", você pode rotulá-lo com o ícone de lata de lixo.
<Button variant="outlined" startIcon={<DeleteIcon />}>
Delete
</Button>
<Button variant="contained" endIcon={<SendIcon />}>
Send
</Button>
Ícone do botão
Botões de ícones são comumente encontrados em barras de aplicativos e barras de ferramentas.
Ícones são também adequados para botões de alternância que permitem uma escolha única para ser selecionado ou desmarcado, como adicionar ou remover uma estrela para um item.
<IconButton aria-label="delete">
<DeleteIcon />
</IconButton>
<IconButton aria-label="delete" disabled color="primary">
<DeleteIcon />
</IconButton>
<IconButton color="secondary" aria-label="add an alarm">
<AlarmIcon />
</IconButton>
<IconButton color="primary" aria-label="add to shopping cart">
<AddShoppingCartIcon />
</IconButton>
<IconButton aria-label="delete" size="small">
<DeleteIcon fontSize="inherit" />
</IconButton>
<IconButton aria-label="delete" size="small">
<DeleteIcon fontSize="small" />
</IconButton>
<IconButton aria-label="delete" size="large">
<DeleteIcon />
</IconButton>
<IconButton aria-label="delete" size="large">
<DeleteIcon fontSize="inherit" />
</IconButton>
<IconButton aria-label="fingerprint" color="secondary">
<Fingerprint />
</IconButton>
<IconButton aria-label="fingerprint" color="success">
<Fingerprint />
</IconButton>
Botões customizados
Aqui estão alguns exemplos de customização do componente. Você pode aprender mais sobre isso na página de documentação de sobrescritas.
🎨 If you are looking for inspiration, you can check MUI Treasury's customization examples.
Botão de carregamento
Os botões de carregamento podem mostrar estado de carregamento e desativar as interações.
<LoadingButton loading variant="outlined">
Submit
</LoadingButton>
<LoadingButton loading loadingIndicator="Loading…" variant="outlined">
Fetch data
</LoadingButton>
<LoadingButton
loading
loadingPosition="start"
startIcon={<SaveIcon />}
variant="outlined"
>
Save
</LoadingButton>
Alterne o interruptor de carregamento para ver a transição entre os diferentes estados.
Botão complexo
Os botões de texto, botões contidos, botões de ação flutuante e botões de ícone são construídos com base no mesmo componente: O componente ButtonBase
. Você pode usar esse componente para construir interações diferentes.
Biblioteca de roteamento de terceiros
One frequent use case is to perform navigation on the client only, without an HTTP round-trip to the server. Um caso de uso comum é usar o botão para acionar uma navegação para uma nova página. Aqui está um guia mais detalhado.
Limitações
Propriedade CSS Cursor not-allowed
O componente ButtonBase define pointer-events: none;
ao desabilitar os botões, o que previne que o cursor desabilitado seja exibido.
Se você deseja usar not-allowed
, você tem duas opções:
- Apenas com CSS. You can remove the pointer-events style on the disabled state of the
<button>
element:
<span style={{ cursor: 'not-allowed' }}>
<Button component={Link} disabled>
disabled
</Button>
</span>
Então:
- Você deve adicionar
pointer-events: none;
de volta quando você precisar exibir dicas em elementos desabilitados. - O cursor não irá mudar se você renderizar algum outro elemento que não seja um botão, por exemplo, um elemento link
<a>
.
- Alteração no DOM. Você pode encapsular o botão:
<span style={{ cursor: 'not-allowed' }}>
<Button component={Link} disabled>
disabled
</Button>
</span>
Isso tem a vantagem de suportar qualquer elemento, por exemplo, um elemento de link <a>
.