Material UI
样式方案
不同于antd和element-ui等其它框架,material-ui中的组件是完全独立的(自我支持)。也就是说,material-ui不需单独导入全局样式表,这意味着使用material-ui不会干扰其它ui组件的表现,如果需要,你可以将material-ui的组件嵌入到其它UI框架中。
material-ui通过CSS-in-JS方案(styled方法)实现自我支持,不使用单独的CSS文件编写样式。同时该方案也支持在react-dom内置组件(html jsx)上使用。
styled是一个用于自定义样式的高阶组件。虽然使用上看起来像是操作元素的style属性,但其定义样式的本质仍是CSS类,而且这些类名是动态生成的。
使用方法如下:
tsx
import { Button, styled } from "@mui/material";
import logo from "../../assets/react.svg";
export function Component() {
return (
<>
<Btn>click me</Btn>
<Img src={logo}></Img>
</>
);
}
const Btn = styled(Button)({
border: "1px red dashed",
});
const Img = styled("img")({
display: "block",
});
布局
- Box:类似div
- Container:水平居中的网页主体
- Grid:栅格系统(注意:row,col都是这个组件,需要手动指定是row还是col)
- Hidden:响应式地控制元素的显隐
- ImageList:grid布局的图片列表
表单组件
- TextField
主题
提供一些在material-ui组件间共享的变量。
包括以下类:
- palette(调色)
- typography(排版)
- spacing(间距)
- breakpoints(断点)
- z-index(z轴)
- globals(全局变量)
使用方法类似react context:
- createTheme创建主题
- ThemeProvider向下传递主题
- useTheme获取主题。
tsx
import { createTheme, ThemeProvider, useTheme } from "@mui/material";
export function Component() {
return (
<ThemeProvider theme={theme}>
<Cus></Cus>
</ThemeProvider>
);
}
const theme = createTheme({
palette: {
primary: { main: "#f00" },
},
});
function Cus() {
const theme = useTheme();
console.log(theme);
return <></>;
}
mui/system
样式工具
- spacing:用于设置元素的间距属性(padding、margin)
- palette:用于设置元素的颜色属性(color、backgroundColor)
- borders:用于设置元素的边框属性(border、borderRadius)
- display:用于设置元素的显示属性(display)
- flexbox
- grid
- positions
- shadows
- sizing
- typography
- screen readers
- compose:用于合并以上工具函数,返回一个工具函数(返回结果是所有被合并函数返回结果的子类)