Материал-пользовательский интерфейс. Как переопределить селектор двух классов библиотеки с моим пользовательским классом

У меня есть элемент Grid с примененным пользовательским классом CSS addPanel (с использованием makeStyles). В преобразованном HTML это выглядит как класс .makeStyles-addPanel-21, примененный к элементу div. Но сам Material-UI дополнительно применяет к этому div собственный стиль, который выглядит вот так.MuiGrid-spacing-xs-3 > .MuiGrid-item.
Конечно, селектор 2-классов Material-UI имеет более высокую специфичность, чем мой селектор 1-класса, поэтому он перекрывает мой.



Как я могу применить селектор 2 или 3 класса к моему Grid, чтобы повысить специфичность селектора CSS и, таким образом, переопределить класс Material-UI?
Вот упрощенный код:

import React from 'react';
import {makeStyles} from "@material-ui/core/styles";
import Grid from "@material-ui/core/Grid";
import TextField from '@material-ui/core/TextField';

const useStyles = makeStyles((theme) => ({
    addPanel: {
        paddingTop: "44px",
        paddingLeft: "50px",
    },
}));

const ManageLocales = (props) => {
    const classes = useStyles();

    return (
        <Grid container spacing = {3}>
            <Grid item container xs = {8} spacing = {3} className = {classes.addPanel}>
                <Grid item>
                    <TextField 
                        label = "Add country" 
                        variant = "outlined" 
                        size = "small"
                    />
                </Grid>                            
            </Grid>
        </Grid>
    );
}
export default ManageLocales;
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
1 362
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте добавить

::ng-deep {


}

вокруг ваших пользовательских классов в вашем файле css. Он должен отдавать приоритет вашим настройкам над чем-либо родным для материального пользовательского интерфейса.

ng-deep выглядит как директива Angular. Но я использую Реакт

Black Beard 14.12.2020 12:22
Ответ принят как подходящий

Я нашел решение. Согласно этому https://material-ui.com/styles/advanced/#with-material-ui-core
вы можете создать селекторы 2, 3 и т. д. классов, используя синтаксис "&.someMegaClass". Таким образом, решение будет выглядеть так:

const useStyles = makeStyles((theme) => ({
    someClass: {
        "&.addPanel": {
            paddingTop: "44px",
            paddingLeft: "50px",
        }
    }
}));

Этот код создаст селектор CSS, который будет выглядеть следующим образом: .makeStyles-someClass-22.addPanel
Чтобы применить эти классы к вашему div, используйте этот синтаксис
className = {`${classes.someClass} addPanel`}
или этот синтаксис
className = {classes.someClass + " addPanel"}
Это способ эффективно переопределить любой библиотечный селектор CSS, просто создав свои собственные селекторы с более высокой специфичностью.

Другие вопросы по теме