前端样式修改

712 阅读2分钟
Antd 版本 ^4.15.2,
less 版本 ^3.0.4,
less-loader 版本 ^4.1.0,

一、Antd定制主题

1. 在 theme.less 中修改

这是一些最常用的通用变量,所有样式变量可以在 这里 找到。

@primary-color: #1890ff; // 全局主色
@link-color: #1890ff; // 链接色
@success-color: #52c41a; // 成功色
@warning-color: #faad14; // 警告色
@error-color: #f5222d; // 错误色
@font-size-base: 14px; // 主字号
@heading-color: rgba(0, 0, 0, 0.85); // 标题色
@text-color: rgba(0, 0, 0, 0.65); // 主文本色
@text-color-secondary: rgba(0, 0, 0, 0.45); // 次文本色
@disabled-color: rgba(0, 0, 0, 0.25); // 失效色
@border-radius-base: 2px; // 组件/浮层圆角
@border-color-base: #d9d9d9; // 边框色

打开控制台,选择你要修改的样式变量名。

c6cccc33f64a8deffa362d2dad8eb01.png

比如这个class类名是 ant-btn-primary,在 这里 查找 btn-primary相关的样式变量。

找到之后逐一在theme.less中,修改你想要样式。

如果不生效,可尝试第二种方式修改,查找样式变量名的方法一样。写准确的变量名是修改样式成功的第一步。

2. 在 webpack 中修改

a.webpack.config.dev.js

{
    test: /.(less)$/,
    use: ["style-loader", "css-loader", {
        loader: "less-loader",
        options: {
            modifyVars: {
                "primary-color": "#2ba3fd",
                "btn-primary-bg": "linear-gradient(to right, #2d9cfe, #1ecef7)",
                "btn-border-style": "solid",
                 ...
            },
            javascriptEnabled: true,
        }
    }]
},

b.webpack.config.prod.js

{
    test: /.(less)$/,
    use: [MiniCssExtractPlugin.loader, "css-loader", {
        loader: "less-loader",
        options: {
            modifyVars: {
                "primary-color": "#2ba3fd",
                "btn-primary-bg": "linear-gradient(to right, #2d9cfe, #1ecef7)",
                "btn-border-style": "solid",
                 ...
            },
            javascriptEnabled: true
        }
    }]
},

3.在这里 没有找到的变量名怎么修改

比如我要修改ant-menu-submenu-title hover 时的样式, 关于menu-submenu-title相关的只找到这一个样式名,不是我要改的样式名。

image.png

a.引入CSS模块

import React from 'react';
import './style.css';
const Box = () => (
  <div>
    <p> Styling React Components </p>
  </div>
);
export default Box;

b.使用:global(...) 来导出全局样式,保证编译后还是原来的名称,以达到样式覆盖的效果。

:global(.ant-menu-light .ant-menu-submenu-title:hover) {
  color: #f1efef !important; // !important增加样式权重 更改全局样式时用
}

webpack 对写的 ant-menu-submenu-title 进行加载,加载完成时 ant-menu-submenu-title已经变了名字,使用 :global 来防止被webpack重命名。

二、侧边导航图标修改

1.引入@ant-design/icons

import { SearchOutlined, CalendarOutlined } from "@ant-design/icons";

antd从 4.0 开始,不再内置 Icon 组件,请使用独立的图标组件包@ant-design/icons。

2.匹配路由名称对应的图标

static getIcon (name) {
    switch (name) {
        case "路名名称1":
            return <SearchOutlined />;
        case "路由名称2":
            return <CalendarOutlined />;
        default:
            break;
    }
}

3.显示路由名称与图标

<Menu>
    <Menu.Item key={path} >
        <span>
            {this.getIcon(name)}
            <span>{name}</span>
        </span>
    </Menu.Item>
</Menu>

三、固定头部导航栏、侧边导航栏

position: "fixed",
top:0// 固定在头部
left: 0, // 固定在左侧
zIndex: 3, // 堆叠顺序 层级设置高一些 防止被遮挡
固定定位
positionfixed
 特性相对于浏览器窗口定位;top、right、bottom 和 left 属性则决定了该元素的最终位置。
应用场景固定在页面某个位置

四、含有Antd表格的页面,只显示表格自身的滚动条

image.png

图上既有table表格自身的滚动条,页面整体也有滚动条。

<Table
    columns={columns}
    dataSource={data}
    scroll={{
      x: 1300, // 表格滚动区域的宽
      y:800,// 表格滚动区域的高
    }}
 />

设置antd table的scroll属性,指定表格滚动区域的宽、高。

页面其他元素与表格的宽高之和,不超过视口的宽高,就不会出现滚动条。