предисловие
В текущем фронтенде развитие javascript очевидно для всех, а фреймворков много. В то же время html тоже пошел рука об руку, а стандарт HTML5 был введен и популяризирован. В таком развитии не хватает только одной роли?
CSS, этот, казалось бы, незаметный парень, играет не менее важную роль в разработке, чем js. CSS, сценарий стиля, кажется, имеет определенную дистанцию от языков программирования, мы можем понимать его как метод описания. Кажется, это заставляет css восприниматься легкомысленно. Однако в последние годы CSS претерпел большие изменения — модуль CSS. Я помню, что можно сказать, что период расцвета js был вызван узлом, который привнес концепцию модуля, так что JS можно было разработать для разработки проектов. Итак, сегодняшний css будет все краше и краше. Если вам понравилась моя статья, добро пожаловать в комментарии, добро пожаловать в Star~. Добро пожаловать, чтобы следовать за мнойблог на гитхабе
текст
Поскольку это статья PostCSS, мы должны сначала понять, что это такое и какое отношение это имеет к модулю CSS, о котором мы говорили ранее? Позвольте мне рассказать вам историю здесь.
я хочу попрощаться с тобой
В настоящее время в инженерной разработке наиболее часто используемыми должны быть Less, Sass и Stylus. Во-первых, давайте представим их. У них есть унифицированное название — препроцессор css. Что такое препроцессор CSS? Это должно быть что-то, что может преобразовать написанный вами формат по своим правилам в css (или более популярный). Их появление, можно сказать, очень вовремя и решает некоторые недостатки CSS:
- Синтаксис недостаточно мощный для вложения и записи, что не способствует модульной разработке.
- Без переменной и логического механизма повторного использования в значениях свойств CSS можно использовать только литеральные формы, а повторяющиеся стили постоянно пишутся, что затрудняет поддержку.
Столкнувшись с вышеуказанными проблемами, препроцессор CSS дает вполне реальное решение:
-
Переменная: Как и другие языки программирования, без многочисленных модификаций.
- Sass: используйте «$» для объявления переменных и используйте двоеточие для разделения имен переменных и значений переменных.
- Меньше: используйте "@" для объявления переменных
- Stylus: В Stylus нет ограничений на объявление переменных, точка с запятой в конце необязательна, но между именем переменной и ее значением должен стоять «знак равенства». Но следует отметить, что если вы объявите переменную с символом "@", Stylus скомпилирует ее, но не присвоит переменной. То есть Stylus не объявляет переменные с "@". Stylus вызывает переменные точно так же, как Less и Sass.
-
объем: с переменными должна быть возможность управлять ими. Как и js, он будет искать переменные в локальной области видимости.
- Sass: его способ — худший из трех, нет понятия глобальных переменных
- Меньше: его метод похож на js, и он находит переменные уровень за уровнем
- Stylus: его подход похож на Less, но, как и в Sass, имеет тенденцию к более императивному поиску.
-
вложенный: Для CSS вложенное написание, несомненно, идеально подходит, больше похоже на четкую связь между родительским и дочерним уровнями.
- Обработка трех здесь одинакова, с использованием «&» для обозначения родительского элемента.
С помощью этих решений мы можем писать стили CSS, обеспечивая DPY, удобство сопровождения и гибкость.
Возвращаясь к теме, причина появления решений наподобие препроцессоров в конечном итоге вызвана отставанием в развитии стандартов CSS. В то же время, мы должны также рассмотреть, действительно ли достаточно просто препроцессора? Часто, когда проект слишком велик, проблема глобальных переменных будет продолжать беспокоить вас из-за отсутствия концепции модулей. Всякий раз, когда вы определяете селектор, всегда учитывайте, используется ли то же имя в других файлах. Ведь проект — это команда, а не человек. Есть ли способ решить эти проблемы?
метод предшественников
Проблема конфликтов имён CSS имеет долгую историю, можно сказать, что мы, фронтенд-разработчики, каждый день усиленно думаем, как изящно решить эти проблемы. CSS не имеет модульного решения AMD, CMD и модуля ES6, такого как js.
Итак, вернемся к вопросу, как это решить? Наши предшественники также предлагали различные решения:
- Object-Oriented CSS
- BEM
- SMACSS
Можно сказать, что решений бесконечное множество, и внутри команды есть множество решений. Но у большинства есть одна общая черта — селекторы с префиксом.
Это ручная работа, возможно, вам придется вручную писать длинные селекторы, или вы можете использовать предварительно скомпилированный язык css. Однако они, по-видимому, не решают насущной проблемы - чем вызван этот дефицит. Рассмотрим пример, написанный с использованием спецификации БЭМ:
<!-- 正确的。元素都位于 'search-form' 模块内 -->
<!-- 'search-form' 模块 -->
<form class="search-form">
<!-- 在 'search-form' 模块内的 'input' 元素 -->
<input class="search-form__input" />
<!-- 在 'search-form' 模块内的 'button' 元素 -->
<button class="search-form__button"></button>
</form>
<!-- 不正确的。元素位于 'search-form' 模块的上下文之外 -->
<!-- 'search-form' 模块 -->
<form class=""search-block>
</form>
<!-- 在 'search-form' 模块内的 'input' 元素 -->
<input class="search-form__input"/>
<!-- 在 'search-form' 模块内的 'button' 元素 -->
<button class="search-form__button"></button>
Каждый раз, когда я пишу так, считается, что программист должен работать сверхурочно, ха-ха!
Надежда
Текущая веб-разработка сосредоточена на идее компонентизации, поэтому для завершения разработки веб-компонентов срочно необходим реальный метод модуля CSS. С 2015 года за рубежом стал популярен CSS-in-JS (типичный представитель, стилизованные-компоненты реакции), а еще — CSS Module.
В этой статье речь пойдет о последнем, а если вам нужно понять первое, вы можете сделать это с помощью Google.
Что касается CSS, как всем известно, это язык описания, а динамики нет. Итак, как сформировать модуль. Сначала мы можем посмотреть на пример реакции с использованием postcss:
//example.css
.article {
font-size: 14px;
}
.title {
font-size: 20px;
}
После этого зашифруйте эти имена:
.zxcvb{
font-size: 14px;
}
.zxcva{
font-size: 20px;
}
Назовите соответствующий контент и поместите его в файл JSON:
{
"article": "zxcvb",
"title": "zxcva"
}
После этого в файле js используйте:
import style from 'style.json';
class Example extends Component{
render() {
return (
<div classname={style.article}>
<div classname={style.title}></div>
</div>
)
}
}
Таким образом изображается прототип модуля css. Конечно, мы не можем каждый раз вручную писать эти вещи. Нам нужны автоматизированные плагины, которые помогут нам в этом процессе. После этого мы должны сначала взглянуть на postCSS.
мне нужно знать тебя
Что такое PostCSS? Возможно, вы подумали бы об этом как о препроцессоре, постпроцессоре и т. д. На самом деле, это ничего. Его можно понимать как подключаемую систему. Использование его введения на домашней странице GitHub:
PostCSS is a tool for transforming CSS with JS plugins. These plugins can support variables and mixins, transpile future CSS syntax, inline images, and more.
Вы можете использовать его с препроцессором или с собственным css. Все это поддерживается, и у него есть огромная экосистема, которую вы могли бы использоватьAutoprefixer
, очень популярный плагин для PostCSS, широко используемый такими компаниями, как Google, Shopify, Twitter, Bootstrap и CodePen.
Конечно, мы также можем использовать его в CodePen:
Здесь рекомендуется посмотретьПодробная серия статей о PostCSS
Далее давайте взглянем на конфигурацию PostCSS:
Здесь мы используем комбинацию webpack+postcss+postcss-loader+cssnext+postcss-import.
Во-первых, мы можем установить эти пакеты через пряжу:
yarn add --dev webpack extract-text-webpack-plugin css-loader file-loader postcss postcss-loader postcss-cssnext postcss-import
Затем настроим webpack.config.js:
const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
context: path.resolve(__dirname, 'src'),
entry: {
app: './app.js';
},
module: {
loaders: [
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options: { importLoaders: 1 },
},
'postcss-loader',
],
}),
},
],
},
output: {
path: path.resolve(__dirname, 'dist/assets'),
},
plugins: [
new ExtractTextPlugin('[name].bundle.css'),
],
};
Затем настройте postcss.config.js в корневом каталоге.
module.exports = {
plugins: {
'postcss-import': {},
'postcss-cssnext': {
browsers: ['last 2 versions', '> 5%'],
},
},
};
После этого вы можете использовать возможности cssnext в разработке
/* Shared */
@import "shared/colors.css";
@import "shared/typography.css";
/* Components */
@import "components/Article.css";
/* shared/colors.css */
:root {
--color-black: rgb(0,0,0);
--color-blue: #32c7ff;
}
/* shared/typography.css */
:root {
--font-text: "FF DIN", sans-serif;
--font-weight: 300;
--line-height: 1.5;
}
/* components/Article.css */
.article {
font-size: 14px;
& a {
color: var(--color-blue);
}
& p {
color: var(--color-black);
font-family: var(--font-text);
font-weight: var(--font-weight);
line-height: var(--line-height);
}
@media (width > 600px) {
max-width: 30em;
}
}
Наконец, используйте webpack для его компиляции.
Суммировать
PostCSS не очень популярен в Китае, но я верю, что он постепенно станет популярным в ближайшем будущем, а ресурсов в Китае немного, но недавно учителями в пустыне была переведена новая книга - "Углубленный PostCSS Веб-дизайн". Те, кому интересно, также могут ознакомиться и изучить некоторые предисловия. В этой статье лишь приблизительно написано о PostCSS.Ввиду отсутствия отечественных ресурсов, я сделал ссылку на обучающие материалы зарубежных блогов, ссылки будут ниже.
Если у вас есть какие-либо вопросы по поводу того, что я написал, вы можете прокомментировать.Если есть ошибка в том, что я написал, пожалуйста, поправьте меня. Если вам нравится мой блог, подписывайтесь на меня в Star~ Yo. Давайте добиваться прогресса вместе. Добро пожаловать, чтобы следовать за мнойблог на гитхабе
Ссылка на ссылку
PostCSS-modules:
make CSS great again!
PostCSS Deep Dive: What You Need to Know
Реклама: я слышал, что за написание статей можно получить книги от Asynchronous Community.Asynchronous Community, как ведущее книжное сообщество ИТ-специалистов в Китае, мне очень нужны его книги, поэтому я изо всех сил старался написать эту статью, я хочуЭта книга, если вы думаете, что это хорошо, поставьте мне лайк ^-^