назад
16 янв

SASS и Compass

Начнем с небольшого примера. Вот так выглядит кроссброузерный резиновый градиент в CSS:

1
2
3
4
5
6
7
8
background: #1e5799;
background: -moz-linear-gradient(top,  #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8));
background: -webkit-linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
background: -o-linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
background: -ms-linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
background: linear-gradient(to bottom,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );

Конечно, поддерживать такой код - сущий ад. Ведь, если Вам потребуется поменять один из цветов градиента, вам нужно поменять его в семи местах, не говоря уже о том что код требуется после каждого изменения тестировать в каждом броузере, чтобы убедиться что Вы ничего не забыли и изменения внесены правильно.

Во всех наших проектах на ruby on rails мы повсеместно используем для верстки язык SASS. Его преимущества:

  • SASS - это язык, компилирующийся в CSS
  • SASS позволяет использовать множество расширений, отсутствующих в CSS, например - функции, переменные и т.д.
  • Можно легко использовать более эффективные CSS селекторы - в наших проектах мы всегда стараемся писать отдельный CSS для отдельных блоков в верстке, и начинать его с #id блока, что гарантирует переносимость и максимальную скорость отрисовки верстки броузером.
  • Конечный результат не отличается от CSS, написанного вручную. Никаких недостатков использование SASS не имеет.
  • CSS сжимается и собирается в один файл при помощи Rails Asset Pipeline (sprockets), что гарантирует минимальный объем и максимальное быстродействие полученного кода

Кроме SASS, мы используем также Compass - фреймворк и библиотеку функций для SASS.

Тот же градиент в SASS + Compass выглядит так:

+background(linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%))

В итоге мы получаем код, который работает быстрее за счет использования более эффективных селекторов, короче, следовательно верстка обходится дешевле, код проще поддерживать за счёт его краткости и логичности, следовательно и поддержка и доработка проектов также проще и дешевле.