#css #reactjs #stylesheet #react-component
#css #reactjs #таблица стилей #реагирующий компонент
Вопрос:
У меня есть такой компонент приложения:
const App = () => {
return (
<Router>
<Route exact path='/' component={Landing} />
<Route path='/login' component={Login} />
</Router>
)
}
У каждого компонента есть свои собственные каталоги и таблицы стилей. моя структура папок выглядит следующим образом:
src
|
|
Landing|
| |
| Landing.js
| Landing.module.css
|
|
Login|
| |
| Login.js
| Login.module.css
|
app.js
index.js
Моя проблема в том, что таблицы стилей компонентов Login и Landing конфликтуют друг с другом, и целевая страница выглядит не очень хорошо. например, цвет фона входа в систему применяется на целевой странице, а я этого не хочу.
Я импортировал только CSS-файл в каждый компонент следующим образом:
import styles from './Landing.module.css'
и это пример того, как я использую переменную styles:
return (
<div className={styles.navBar}>
<Link to="/">
<img className={styles.logo} src="https://image.flaticon.com/icons/png/512/2039/2039175.png" />
</Link>
{loggedIn amp;amp;
<div>
<button onClick={logout}>log out</button>
<Link className={styles.navItem} to="/users">get users</Link>
</div>
}
{!loggedIn amp;amp;
<div>
<Link className={styles.navItem} to="/login">log in</Link>
<Link className={styles.navItem, styles.btn} to="/signup">signup</Link>
</div>
}
</div>
)
пожалуйста, помогите мне.
Комментарии:
1. Как импортировать файлы css модуля для каждого компонента?
2. Если вы используете его так, как
className={styles.yourCssSelector}
должно быть нормально. Пожалуйста, приведите пример файла css и того, как вы используете его внутри comp.3. ДА. мне нравится использовать переменную styles.
4. Можете ли вы предоставить воспроизводимый пример на codesandbox.io или эквивалент?
5. Я не могу. потому что я очень ленив 🙂 и это тоже требует времени
Ответ №1:
Даже если он старый, я собираюсь ответить за то, кто придет после: причина, по которой это происходит, заключается в том, что ваши селекторы CSS, скорее всего, имеют ту же специфику, следовательно, порядок появления определяет, какой стиль будет применен.
Login
в вашей структуре папок появляется после Landing
, поэтому ваш bundler заставит Login
стили появляться последними в вашем связанном CSS, который затем переопределит ваши Landing
.
Существует множество решений этой проблемы:
- вы можете повысить специфичность селектора, который вы хотите выиграть (например, дважды повторив класс в вашем CSS-файле)
- вы можете уменьшить специфичность селектора, который хотите потерять (например, с
:where()
помощью) - теперь вы можете использовать каскадные слои, если вас устраивает, какие браузеры поддерживаются (например
@layer
) - и т.д…