当前位置: 首页 > news >正文

Material UI 5 学习01-按钮组件

Material UI 5 学习01-按钮组件

  • 一、安装Material UI
  • 二、 组件
    • 1、Button组件
      • 1、基础按钮
      • 2、variant属性
      • 3、禁用按钮
      • 4、可跳转的按钮
      • 5、disableElevation属性
      • 6、按钮的点击事件onClick
    • 2、Button按钮的颜色和尺寸
      • 1、Button按钮的颜色
      • 2、按钮自定义颜色
      • 3、Button按钮的尺寸
    • 3、图标按钮
      • 1、带有图标的按钮

一、安装Material UI

首先我们创建React工程。然后安装样式和字体。下面使用yarn安装

//Material UI
yarn add @mui/material @emotion/react @emotion/styled
//styled-components
yarn add @mui/material @mui/styled-engine-sc styled-components
//安装Roboto字体
yarn add @fontsource/roboto
//安装MUI图标
yarn add @fontsource/roboto//在public index.html引入google字体样式
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"/>
//在public index.html引入google MUI字体样式
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"/>

二、 组件

我们先学习MUI的组件

1、Button组件

1、基础按钮

最基本的button按钮定义:

import {Button} from "@mui/material";
function App() {return (<div><Button>这是一个按钮</Button></div>);
}
export default App;

在这里插入图片描述
可以看出,最基本的按钮没有边框,字体默认是蓝色的,其鼠标点击上去有背景颜色,是淡蓝色。其他的就没有什么了。
在这里插入图片描述

2、variant属性

序号属性值含义
1text文本按钮,这个是按钮的默认属性。文本按钮 通常用于不太明显的动作,包括那些位于对话框、卡片中的动作。 在卡片中,文本按钮有助于保持卡片内容的重点。
2contained包含按钮。包含按钮 是高度强调的,以其使用的抬高和填充来区分。 它们包含对你的应用来说是主要的操作。
3outlined轮廓按钮。轮廓按钮也是包含按钮的一种较低强调度的选择, 或者更强调文本按钮的替代品。

代码演示:

<Button variant='text'>这是一个文本按钮</Button>
<Button variant='contained'>这是包含按钮</Button>
<Button variant='outlined'>这是轮廓按钮</Button>

在这里插入图片描述

3、禁用按钮

加上disabled属性可以禁用按钮。默认是true。false就不是禁用了。

<Button variant='text' disabled>禁用文本按钮</Button>

4、可跳转的按钮

加尚href属性,可以进行跳转

<Button variant='text' href="#">禁用文本按钮</Button>
import {Button} from "@mui/material";
function App() {return (<div><Button variant='text'>这是一个文本按钮</Button><Button variant='text' disabled>禁用文本按钮</Button><Button variant='text' href="#">禁用文本按钮</Button></div>);
}
export default App;

在这里插入图片描述

5、disableElevation属性

disableElevation是禁用阴影的意思。加上此属性,那么点击按钮没有阴影。
默认的按钮点击之后都存在阴影,左边的按钮是默认的按钮,右边的加了disableElevation属性,因此右边的点击没有阴影
在这里插入图片描述
在这里插入图片描述

6、按钮的点击事件onClick

import {Button} from "@mui/material";function App() {const showData = () => {alert('按钮被点击了');}return (<div><Button onClick={showData} variant='contained'>按钮</Button></div>);
}export default App;

上面的代码也可以简写:

import {Button} from "@mui/material";
function App() {return (<div><Button onClick={()=>{alert("按钮被点击")}} variant='contained'>按钮</Button></div>);
}
export default App;

2、Button按钮的颜色和尺寸

1、Button按钮的颜色

按钮使用color属性即可设置值:color=“primary”
默认的按钮属性值有7个

序号属性值含义
1color=“inherit”按钮文字的颜色取决于父组件的颜色
2color=“primary”强调重要行为的按钮
1color=“secondary”次要行为的按钮
1color=“success”显示操作成功的按钮
1color=“error”显示操作错误的按钮
1color=“info”陈述按钮
1color=“warning”警告按钮

在这里插入图片描述
|
在这里插入图片描述

2、按钮自定义颜色

使用Theme自定义颜色
创建Theme.jsx文件,编写自定义的样式

import {createTheme} from "@mui/material";
export const  theme = createTheme({palette: {primary: {main: '#000000',},secondary: {main: '#F5EBF7',light: '#F5EBFF',contrastText: '#47008F',},},
});

在index中使用ThemeProvider引入theme

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {ThemeProvider} from "@mui/material";
import {theme} from './Theme'const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<React.StrictMode><ThemeProvider theme={theme}><App /></ThemeProvider></React.StrictMode>
);reportWebVitals();

最后在按钮中应用

import {Button, Stack} from "@mui/material";function App() {return (<div ><Stack spacing={3}><Button variant='contained' color="primary">主要的按钮</Button></Stack></div>);
}
export default App;

由于自定义的primary为黑色,所以最终按钮呈现黑色
在这里插入图片描述

疑惑点:Button好像颜色属性只能从那7个属性值去选择。虽然可以自定义7个属性值的颜色。但是无法使用main、light、dark更为详细的定义。Box就可以定义具体的色调

export const  theme = createTheme({palette: {primary: {main: '#000000',light: '#F5EBF7',contrastText: '#80ff80',/*文本颜色*/},secondary: {main: '#F5EBF7',light: '#F5EBFF',contrastText: '#47008F',},},
});

也就是说Button组件默认就是main。不知道如何使用light。

3、Button按钮的尺寸

使用size属性申明

序号属性含义
1size=“small”小按钮
2size=“medium”中按钮
3size=“large”大按钮
import {Button, Stack} from "@mui/material";function App() {return (<div ><Stack spacing={3}><Button variant='contained' size="small">按钮1</Button><Button variant='contained' size="medium">按钮2</Button><Button variant='contained' size="large">按钮3</Button></Stack></div>);
}
export default App;

在这里插入图片描述

3、图标按钮

使用图标,可以直接在Material Icons中选择,前提是安装icon库

yarn add @mui/icons-material @mui/material @emotion/styled @emotion/react

1、带有图标的按钮

序号属性含义
1startIcon={<图标组件/>}在按钮文字前面的图标
2endIcon={<图标组件 />}在按钮文字之后的图标
import {Button, Stack} from "@mui/material";
import DeleteIcon from '@mui/icons-material/Delete';
import SendIcon from '@mui/icons-material/Send';function App() {return (<div ><Stack spacing={3}><Button variant="outlined" startIcon={<DeleteIcon />}>Delete</Button><Button variant="contained" endIcon={<SendIcon />}>Send</Button></Stack></div>);
}
export default App;

上面的代码引入了两个图标组件DeleteIcon 、SendIcon 。图标可以自定搜索
在这里插入图片描述

相关文章:

  • 如何系统的学习Python——Python的基本语法
  • 2025张宇考研数学,百度网盘视频课+36讲PDF讲义+真题
  • 前人砍树型代码写法vue屎山代码
  • ManualResetEvent 在线程中的使用C#
  • 【VTK编译】带PassionReconstruction的编译过程
  • Linux下进程相关概念详解
  • Diffusion Models for Implicit Image Segmentation Ensembles
  • MySQL之索引详解
  • 【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】
  • ROS从入门到精通4-2:Docker安装ROS、可视化仿真与终端复用
  • 利用MATLAB模拟点电荷的电场分布
  • 通过 python 和 wget 批量下载文件(在Linux/Ubuntu/Debian中测试)
  • C语言深入学习 --- 1.数据的存储
  • 【Apache Camel】基础知识
  • 关于制作一个Python小游戏(三)
  • 「面试题」如何实现一个圣杯布局?
  • IP路由与转发
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MaxCompute访问TableStore(OTS) 数据
  • MySQL数据库运维之数据恢复
  • PHP 小技巧
  • React Transition Group -- Transition 组件
  • react-native 安卓真机环境搭建
  • vue-cli在webpack的配置文件探究
  • 分享一份非常强势的Android面试题
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 记一次删除Git记录中的大文件的过程
  • 前端面试之闭包
  • - 转 Ext2.0 form使用实例
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 如何正确理解,内页权重高于首页?
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #mysql 8.0 踩坑日记
  • #QT(串口助手-界面)
  • #图像处理
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (4)STL算法之比较
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (排序详解之 堆排序)
  • (实战篇)如何缓存数据
  • (五)MySQL的备份及恢复
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .jks文件(JAVA KeyStore)
  • .libPaths()设置包加载目录
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET文档生成工具ADB使用图文教程
  • .ui文件相关
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [APUE]进程关系(下)
  • [BZOJ2208][Jsoi2010]连通数