Оптимизация CSS - дополнительные классы в dom или препроцессорно-повторяющийся стиль в файле css?

Я начинаю довольно большой проект и рассматриваю возможность использования LESS для предварительной обработки моего css.

полезная вещь в LESS заключается в том, что вы можете определить миксин, который содержит, например:

.border-radius(@radius) {
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    -o-border-radius: @radius;
    -ms-border-radius: @radius;
    border-radius: @radius;
}

а затем использовать его в объявлении класса как

.rounded-div {
   .border-radius(10px);
}

чтобы получить выходной css как:

.rounded-div {
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    -o-border-radius: 10px;
    -ms-border-radius: 10px;
    border-radius: 10px;
}

это чрезвычайно полезно в случае префиксов браузера. Однако эту же концепцию можно использовать для инкапсуляции часто используемых CSS, например:

.column-container {
    overflow: hidden;
    display: block;
    width: 100%;
}
.column(@width) {
    float: left;
    width: @width;
}

а затем используйте этот миксин всякий раз, когда мне нужны столбцы в моем дизайне:

.my-column-outer {
    .column-container();
    background: red;
}
.my-column-inner {
    .column(50%);
    font-color: yellow;
}

(конечно, используя препроцессор, мы могли бы легко расширить это, чтобы сделать его гораздо более полезным, например, передать количество столбцов и ширину контейнера в качестве переменных и LESS определить ширину каждого столбца в зависимости от количества столбцов и ширины контейнера! )

Проблема в том, что при компиляции мой окончательный файл css будет иметь 100 таких объявлений, скопированных и вставленных, что сделает файл огромным, раздутым и повторяющимся. Альтернативой этому может быть использование системы сеток, в которой есть предопределенные классы для каждого параметра макета столбца, например. .c-50 (с определением "float: left; width:50%;" ), .c-33, .c-25 для макета с 2, 3 и 4 столбцами, а затем используйте их занятия в моем доме.

Мне очень не нравится идея дополнительных классов, по опыту это приводит к раздутому дому (создание дополнительных разделов только для присоединения классов сетки). Также самый простой учебник по html/css расскажет вам, что dom должен быть отделен от стилей — классы сетки связаны со стилями! для меня это то же самое, что прикрепить класс "border-radius-10" к приведенному выше примеру .rounded-div!

С другой стороны, большой файл css, который возникнет из-за повторяющегося кода, также является недостатком.

Итак, я думаю, мой вопрос в том, какой из них вы бы порекомендовали и какой вы используете?

и какое решение лучше всего подходит для оптимизации? помимо большего размера файла, проводились ли какие-либо исследования того, отображает ли браузер несколько классов быстрее, чем большой файл css, или наоборот?

Я хотел бы услышать ваше мнение!


person anna.mi    schedule 08.06.2012    source источник
comment
Я бы не сказал, что большой файл CSS (в пределах разумного) — это плохо: браузеры будут его кэшировать, а CSS часто уступает таким вещам, как jQuery, с точки зрения размера загружаемого файла, даже с огромным файлом CSS. Вы компилируете свой LESS на сервере с помощью PHP-скрипта или на клиенте с библиотекой JS?   -  person Bojangles    schedule 08.06.2012
comment
@JamWaffles определенно использует предварительно скомпилированный css на живом сайте, js для разработки!   -  person anna.mi    schedule 08.06.2012


Ответы (1)


С моей точки зрения, компиляция LESS на стороне клиента с использованием JS может снизить вашу производительность и создать дополнительную нагрузку на браузер. Но если вы можете скомпилировать его на сервере, то веб-сервер может использовать gzip и передать его клиенту.
В любом случае, лично я предпочитаю компилировать на стороне сервера, потому что:

  1. Я не могу доверять производительности компилятора JS LESS в несовременных браузерах
  2. Даже я не могу доверять функциональности компиляторов на стороне клиента, потому что каждый браузер может иметь свой собственный вывод. С другой стороны, я могу положиться на свою работу по компиляции на стороне сервера.
person Tooraj Jam    schedule 08.06.2012
comment
Не могли бы вы объяснить больше? - person Tooraj Jam; 12.06.2012
comment
Подводя итог, вопрос заключается в том, будет ли более эффективно для браузера отображать DOM со многими классами в каждом div (= меньший более модульный файл css) или один класс со всеми определениями css в этом одном классе для каждого элемента dom (по существу приводит к большему файлу css) - person anna.mi; 14.06.2012