Antd: Как переопределить стиль одного экземпляра компонента

Я использую webpack для импорта файла antd.less в глобальный файл App.less. Затем я переопределяю некоторые глобальные стили и пакеты веб-пакетов:

// App.less
@import "~antd/dist/antd.less";
@import "./fonts.css";
@import "./reactSplitPane.css";      

@heading-color          : fade(#000, 100%);
@text-color             : fade(#000, 100%);
@text-color-secondary   : fade(#000, 100%);
@disabled-color         : fade(#000, 25%);

Моя конфигурация webpack 2 выглядит так:

    {
        test: /\.less$/,
        use: ExtractTextPlugin.extract({
            fallback: "style-loader",
            use: [
            { 
                loader: "css-loader", 
                options: { importLoaders: 1}
            },
            "less-loader"
            ]
        })
    },
    {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
            fallback: "style-loader",
            use: "css-loader"
        })
    }

Теперь, например, я хочу переопределить размер одного экземпляра компонента «Вкладки». Как лучше всего это сделать?

Пример переопределения цвета нижней строки панели вкладок:

.ipf-appbar {
    font-size: 24px; // this applies to all text in the Tabs component
    border-bottom: 1px solid darkmagenta; // also applies to all border
}
.ant-tabs-bar {
    border-bottom: 1px solid darkmagenta; // this applies only to the desired div but is global
}

Но это должно быть действительно только для одного компонента. Компонент выглядит так (Typescript):

import * as ReactDOM from "react-dom";
import * as React from "react";
import { Tabs } from "antd";
import "./AppBar.less";

export class AppBar extends React.Component<undefined, undefined> {
    render() {
        return (
            // <Tabs className="ipf-appbar">
            <Tabs>
                <Tabs.TabPane tab="Start" key="1">Start</Tabs.TabPane>
                <Tabs.TabPane tab="Projekte" key="2">Projekte</Tabs.TabPane>
            </Tabs>
        );
    }
}

person Knack    schedule 01.03.2017    source источник
comment
Пожалуйста, добавьте свой html-код, чтобы я мог сделать свой пример более конкретным   -  person Deividas Karzinauskas    schedule 01.03.2017
comment
Я использую React с TS. Смотрите мои обновления.   -  person Knack    schedule 01.03.2017


Ответы (2)


Вы должны настроить Tabs компонент с помощью css, добавив пользовательский класс/идентификатор css. Затем вы можете настроить этот класс/идентификатор в своем файле css. В вашем конкретном случае, когда вы добавляете класс .ipf-appbar, вы можете стилизовать этот конкретный компонент следующим образом:

.ipf-appbar .ant-tabs-bar {
    font-size: 24px; // this applies to all text in the Tabs component
    border-bottom: 1px solid darkmagenta; // also applies to all border
}
person Deividas Karzinauskas    schedule 01.03.2017
comment
Как мне переопределить данный вложенный класс для этого компонента? Например. .ant-tabs-bar { border-bottom: 1px solid darkmagenta; }. Это должно применяться только к одному экземпляру. - person Knack; 01.03.2017
comment
Мне нужно было добавить пробел... .ipf-appbar .ant-tabs-bar. Работает отлично. Ваше здоровье! - person Knack; 01.03.2017

Простым решением было бы создать файл css для этого компонента и переопределить стиль, используя тот же класс, который использует antd.

и по умолчанию

.ant-menu-dark .ant-menu-item,
.ant-menu-dark .ant-menu-item-group-title,
.ant-menu-dark .ant-menu-item > a,
.ant-menu-dark .ant-menu-item > span > a {
  color: rgba(255, 255, 255, 0.65);
}

индивидуальные

.ant-menu-dark .ant-menu-item,
.ant-menu-dark .ant-menu-item-group-title,
.ant-menu-dark .ant-menu-item > a,
.ant-menu-dark .ant-menu-item > span > a {
  color: #e9631a !important;
}
person Sonson Ixon    schedule 17.01.2021