Использование фреймворка CSS с семантической разметкой

Я надеюсь, что существует какая-то структура CSS / стиля, которая работает со строго семантической разметкой и приводит к относительно небольшим файлам. Как я вижу сейчас, это еще один пример железного треугольника «три варианта, выберите два».

Вот что я имею в виду. Я ищу:

  1. Какой-то фреймворк визуального стиля (чтобы мне не приходилось писать все вручную)

  2. ... который работает с простым семантическим HTML без какого-либо загрязнения имен классов только ради визуального стиля. Это мое тупое, упрямое мнение, но я считаю, что разметка всегда должна быть разреженной, простой и семантической. Такие вещи:

    <div class = "widget">
    

    ... а не это:

    <div class = "widget d-flex p-2 bd-highlight">
    
  3. ... что приводит к относительно небольшому размеру файла (-ов). Сами по себе фреймворки на самом деле довольно скудные. Но чтобы оставаться легкими, им требуется декларативная разметка. Препроцессоры, такие как Sass, действительно очень легко позволяют выполнять наследовать наборы правил прямо из фреймворков. Итак, вы можете сделать это:

    .widget {
        @extend .d-flex;
        @extend .p-2;
        @extend .bd-highlight;
    }
    

    Но это очень быстро приводит к размеру файла абсолютно колоссальный. Наборы правил остаются крошечными, но списки селекторов взрываются. Я бы категорически отверг это решение только из-за проблемы с размером файла.

Моя интуиция подсказывает мне, что у меня есть варианты: либо продолжить писать CSS вручную (отбрасывая №1), либо начать объявлять стили в моем html (отбрасывая №2).

Кто-нибудь знает выход из этого? Я неправильно использую Sass? Есть ли другой тип фреймворка, о котором я не знаю? Я работаю с Sass и React, но я готов учиться чему угодно.

Трудно понять, что вы ищете, но использование расширения в sass может вызвать большие наборы правил. Конечно, можно писать небольшие файлы с помощью sass. Короткий рад на расширении: sitepoint.com/sass-extend-nobody-told-you

anderssonola 16.08.2018 09:16
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
0
1
175
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного покопавшись в этой проблеме, я думаю, что в настоящее время нет разумного способа использовать структуру CSS с семантической разметкой без серьезных штрафов. Я решил использовать собственный CSS для окончательной сборки. Некоторые общие примечания:

Некоторые фреймворки (особенно Bootstrap) предоставляют возможность стилизации с помощью миксинов (@include framework-mixin()). Это приводит к дублированию наборов правил (и, следовательно, к некоторому раздуванию), но это намного легче, чем то, что происходит, когда вы используете @extend для наследования. Однако многие базовые классы просто отображаются как обычные классы. Это означает, что вы по-прежнему сталкиваетесь с вопросом семантической разметки или массового раздувания файлов.

Кажется, что большинство современных фреймворков организуют свою кодовую базу в наследуемые блоки. Если вы очень внимательно относитесь к @extend только с теми классами, которые вам нужны, вы можете получить (возможно) приемлемые размеры файлов для окончательного HTML. Вместо того, чтобы включать весь файл css фреймворка, рассмотрите возможность включения только необходимых файлов компонентов. Я все же обнаружил, что даже эти файлы могут очень легко стать слишком большими, но если вы будете осторожны, это может сработать.

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