Как ссылаться в каталоге файла SCSS из компонента?
В настоящее время у меня есть следующая структура каталогов:
stylesheets
..modules
...._all.scss
...._colors.scss
..partials
...._all.scss
...._Home.scss
..main.scss
И в моем _Home.scss
у меня есть:
@import '../modules/all';
.headerStyle {
color: pink;
font-size: 15;
font-weight: 500;
}
И в моем main.scss
я импортирую все _all.scss
в папку стилей, например:
@import 'modules/all'
@import 'partials/all'
html { font-family: 'Roboto', sans-serif; }
body {
margin: 0;
background-color: orange
}
И, наконец, в моем компоненте я бы импортировал таблицу стилей так:
import '../../stylesheets/main.scss'
...
<div className="headerStyle">Header</div>
Тем не менее, div не имеет стиля .headerStyle
в _Home.scss
. Я проверил путь к каталогу на main.scss
, и это правильно, и я не получаю никаких ошибок.
И на самом деле применяется следующее:
body {
margin: 0;
background-color: orange
}
Что я могу делать неправильно? И есть ли лучший способ импортировать таблицы стилей в компонент, а не определять его каждый раз для компонента?
Благодарим вас заблаговременно и ответим/принимаем ответ.
Ответы
Ответ 1
Я успешно выполнил следующее (используя простой HTML и Scout-App, чтобы преобразовать SCSS в CSS):
Изменить: Как уже упоминалось, я никогда не использовал React, но на основе этого сообщения hugogiraudel.com он должен быть того же синтаксиса, что и в моем решение (более или менее/с первого взгляда;-)).
Изменить 2: я начал использовать SCSS всего несколько дней назад сам. Насколько я могу судить, ваши единственные ошибки - это несколько опечаток, показанных в моем примере. Поскольку применяется "тело", я предполагаю, что оператор import в вашем компоненте корректен для React.
Если есть лучшее решение для импорта в компоненты, нужно ответить другим. Но похоже, что автор связанного сообщения в блоге имеет другой подход, и есть также доступный репозиторий github.
Структура каталогов :
- project_folder
- index.html
- stylesheets
- main.scss
- partials
- _all.scss
- _Home.scss
Index.html
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- NOTE: 'css_stylesheets' is the folder where the
Scout-App added the transformed CSS files -->
<link rel="stylesheet" href="css_stylesheets/main.css" type="text/css" />
</head>
<body>
<!-- NOTE: I don't know anything about React but
in HTML the attribute is 'class' not 'className'
Edit 3: 'className' is correct, my bad -->
<div class="headerStyle">Header</div>
</body>
</html>
таблицы стилей /main.scss
@import 'partials/all'; // Your missing here a semicolon (;) I think
html { font-family: 'Roboto', sans-serif; }
body {
margin: 0;
background-color: orange; // here too but wasn't crucial
}
таблицы стилей/обертоны/_all.scss
@import '_Home.scss';
таблиц стилей/обертоны/_Home.scss
.headerStyle {
color: pink;
font-size: 30px; // I added here pixels because Firefox ignored it otherwise
font-weight: 500;
}
Ответ 2
Вы настроили Webpack для использования каталога stylesheets
, чтобы вы могли использовать
import 'main.scss'
вместо
import '../../stylesheets/main.scss'
Ответ 3
@fingerpich попал в хорошее решение для упрощения ваших путей. Вы можете настроить псевдоним в свой каталог stylesheets, а затем всегда импортировать его относительно этого каталога:
Конфигурация Webpack:
{
resolve: {
alias: {
// the path needs to resolve relative to the files where you're importing them
stylesheets: path.resolve(__dirname, '../stylesheets')
}
}
}
Документы: https://webpack.github.io/docs/configuration.html#resolve-alias
Компонентный файл:
import 'stylesheets/main.scss'
Также вы можете позволить webpack разрешать импорт из ваших sass файлов, добавляя ~ к началу пути. Затем вы можете написать свой импорт там, как в ваших файлах компонентов, и они разрешат ваш псевдоним:
@import '~stylesheets/modules/_colors.scss'
Документы: https://github.com/jtangelder/sass-loader#imports
Ответ 4
В общем коде, которому вы предоставили только одну вещь, отсутствует точка с запятой (;)
При использовании SCSS мы должны использовать полуточку, чтобы завершить утверждение.
Вот обновленный код:
@import 'modules/all';
@import 'partials/all';
html { font-family: 'Roboto', sans-serif; }
body {
margin: 0;
background-color: orange;
}