You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Material UI中自定义水平虚线分割线?

解决MUI Divider改为虚线分割线的问题

当前效果:实线样式的水平分割线
目标效果:虚线样式的水平分割线

你之前设置borderRadius没效果是因为这个属性负责的是圆角,和虚线样式无关。MUI的Divider默认使用solid类型边框,要改成虚线需要调整边框样式属性。下面是具体解决方案:

方案1:直接修改现有组件样式

针对代码里两种分割线场景(独立Divider、带divider属性的ListItem),分别覆盖样式:

import * as React from "react";
import List from "@mui/material/List";
import ListItem from "@mui/material/ListItem";
import ListItemText from "@mui/material/ListItemText";
import Divider from "@mui/material/Divider";

const style = {
  width: "100%",
  maxWidth: 360,
  bgcolor: "background.paper"
};

export default function ListDividers() {
  return (
    <List sx={style} component="nav" aria-label="mailbox folders">
      <ListItem button>
        <ListItemText primary="Inbox" />
      </ListItem>
      {/* 修改独立Divider为虚线 */}
      <Divider sx={{ borderTopStyle: 'dashed', borderTopWidth: 1 }} />
      {/* 处理带divider属性的ListItem,覆盖内置分割线样式 */}
      <ListItem 
        button 
        divider
        sx={{ '& .MuiDivider-root': { borderTopStyle: 'dashed' } }}
      >
        <ListItemText primary="Drafts" />
      </ListItem>
      <ListItem button>
        <ListItemText primary="Trash" />
      </ListItem>
      {/* 另一个虚线Divider */}
      <Divider sx={{ borderTopStyle: 'dashed', borderTopWidth: 1 }} />
      <ListItem button>
        <ListItemText primary="Spam" />
      </ListItem>
    </List>
  );
}

方案2:全局统一修改Divider样式

如果希望项目中所有Divider默认都是虚线,可以通过MUI主题定制实现:

import { createTheme, ThemeProvider } from '@mui/material/styles';
import List from "@mui/material/List";
import ListItem from "@mui/material/ListItem";
import ListItemText from "@mui/material/ListItemText";
import Divider from "@mui/material/Divider";

// 定制主题
const theme = createTheme({
  components: {
    MuiDivider: {
      styleOverrides: {
        root: {
          borderTopStyle: 'dashed',
        },
      },
    },
  },
});

const style = {
  width: "100%",
  maxWidth: 360,
  bgcolor: "background.paper"
};

export default function ListDividers() {
  return (
    <ThemeProvider theme={theme}>
      <List sx={style} component="nav" aria-label="mailbox folders">
        {/* 这里的Divider和带divider属性的ListItem都会自动应用虚线样式 */}
        <ListItem button>
          <ListItemText primary="Inbox" />
        </ListItem>
        <Divider />
        <ListItem button divider>
          <ListItemText primary="Drafts" />
        </ListItem>
        <ListItem button>
          <ListItemText primary="Trash" />
        </ListItem>
        <Divider />
        <ListItem button>
          <ListItemText primary="Spam" />
        </ListItem>
      </List>
    </ThemeProvider>
  );
}

替代方案:自定义分割线组件

如果觉得MUI的Divider限制太多,也可以自己写一个极简的虚线分割线:

const CustomDashedDivider = () => (
  <div 
    style={{
      width: '100%',
      borderTop: '1px dashed rgba(0,0,0,0.12)',
      margin: '8px 0',
    }}
  />
);

// 使用时直接替换原Divider即可
<CustomDashedDivider />

内容的提问来源于stack exchange,提问作者Ralph Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:24:46