Конфликты CSS в react

#css #reactjs #dom

#css #reactjs #dom

Вопрос:

Как использовать обычный CSS без использования каких-либо модулей или внешних зависимостей, таких как CSS module или styled-components в React, избегая столкновения имен классов или переопределения CSS для других компонентов?

Комментарии:

1. Вы не можете. Два способа только для css с ограниченной областью и для глобальных css. css-модули или стилизованные компоненты предназначены для css с ограниченной областью. И еще один — классический способ, и он имеет глобальную область действия.

Ответ №1:

Существует как минимум два способа:

  • чтобы охватить его именем класса для определенного компонента:

    .employee-data .warning { ... }

  • чтобы охватить его под определенной страницей

    #about-us-page .photo { ... }

Комментарии:

1. Спасибо за предложение, но проблема в том, что классы уже объявлены, а файл немного большой, и в каждом разделе есть несколько классов. Поэтому, если я хочу применить модуль CSS, мне придется снова записать все имена классов в этот большой файл. На самом деле, я хотел решение, основанное на обычном CSS, которое уже разработано. Я также использую пакет Scoped.css, но он не работает.

Ответ №2:

Ваш стиль.css

 .button {
  cursor: pointer;
  border: 1px solid #1a202c;
  padding: 8px;
  min-width: 64px;
 
  background: transparent;
 
  transition: all 0.1s ease-in;
}
 
.button:hover {
  background: #1a202c;
  color: #ffffff;
}
 

Ваш App.js

 import React from 'react';
import './style.css';
 
function App() {
  ...
}
 
function Basket({ items, onClick }) {
  return (
    <ul>
      {items.map((item) => (
        <li key={item.id}>
          {item.name}
          <button
            type="button"
            className="button"
            onClick={() => onClick(item)}
          >
            {item.isFavorite ? 'Unlike' : 'Like'}
          </button>
        </li>
      ))}
    </ul>
  );
}
 

Ответ №3:

Функция, которую вы ищете, называется CSS Modules

Примером может быть

 import React, { Component } from 'react';
import styles from './Button.module.css'; // Import css modules stylesheet as styles
import './another-stylesheet.css'; // Import regular stylesheet

class Button extends Component {
  render() {
    // reference as a js object
    return <button className={styles.error}>Error Button</button>;
  }
}
 

Результат будет таким. Посмотрите хэш в конце classname

 <button class="Button_error_ax7yz">Error Button</button>
 

Комментарии:

1. Спасибо за предложение, но проблема в том, что классы уже объявлены, а файл немного большой, и в каждом разделе есть несколько классов. Поэтому, если я хочу применить модуль CSS, мне придется снова записать все имена классов в этот большой файл. На самом деле, я хотел решение, основанное на обычном CSS, которое уже разработано. Я также использую пакет Scoped.css, но он не работает.

2. @MIRTAUHIDULISLAM Вам не нужно переписывать. Импортируйте свою таблицу стилей следующим образом — import classes from ‘./Header.css’; и примените их, как <div className={classes.Header}>...</div> проверить это

Ответ №4:

Если вы используете приложение CRA, я бы рекомендовал CSS Modules Stylesheet, поскольку они встроены в CRA и просты в использовании.

нет никаких проблем, просто обновите имя файла как xyz.module.css и импортируйте

 import styles from './xyz.module.css'; // Import css modules stylesheet as styles

<button className={styles.error}>Error Button</button>
 

Здесь ошибка — это имя вашего класса, такое же, как у обычного CSS.

Теперь у вас может быть то же имя класса, что и ошибка в другом файле css, например abc.module.css, тогда просто

 import styles from './xyz.module.css';
import stylesA from './abc.module.css'; 
<button className={styles.error}>Error Button</button>
<button className={stylesA.error}>Error Button</button>

~~~ xyz.module.css ~~~
.error {
  background-color: red;
}

~~~ abc.module.css ~~~
.error {
  background-color: green;
}
 

https://create-react-app.dev/docs/adding-a-css-modules-stylesheet/

Комментарии:

1. Спасибо за предложение, но проблема в том, что классы уже объявлены, а файл немного большой, и в каждом разделе есть несколько классов. Поэтому, если я хочу применить модуль CSS, мне придется снова записать все имена классов в этот большой файл. На самом деле, я хотел решение, основанное на обычном CSS, которое уже разработано. Я также использую пакет Scoped.css, но он не работает.