460 likes | 645 Views
Инструменты для увеличения продуктивности при работе над фронт-эндом. Роман В. iBEC Systems, июль 2012. О чём пойдёт речь. Редактор кода HTML5 Boilerplate Препроцессоры CSS. Редактор кода. Редактор кода. Текстовый редактор IDE Что-то ещё (командная строка?)
E N D
Инструменты для увеличения продуктивности при работе над фронт-эндом Роман В. iBEC Systems, июль 2012
О чём пойдёт речь • Редактор кода • HTML5 Boilerplate • Препроцессоры CSS
Редактор кода • Текстовый редактор • IDE • Что-то ещё (командная строка?) • Стоит изучить и настроить под себя как можно лучше • Поставить классный скин/подсветку кода • Горячие клавиши • Сниппеты • Плагины (!)
Плагины • Программисты — умный (ленивый) народ • Под любую задачу есть свой инструмент • Пишутся для своего подхода к разработке • Что-то может не подойти нам • Что-то заставит пересмотреть и изменить свой процесс
Полезные плагины(Sublime Text 2) • Zen Coding • Туториал на русском на chrono.kz • Подсветка ошибокв реальном времени (PHP, JS, CSS) • SublimeLinter • Работа с FTP, SVN, Git • FTPSync, SVN, Git, Tortoise • Alignment • Sidebar Enhancements • CodeIntel – у меня так и не заработал на Win 7
HTML5 что?.. • HTML5 Boilerplate • Коллекция best practicesдля скорого начала работ над фронт-эндом • Чтобы не начинать совсем с чистого листа • Фундамент для сайта/веб-приложения • Не просто reset.css, но и не CSS-фреймворк • Не зависит от выбранного CSS-фреймворка
Условные комментарии для IE • Не нужно выносить все стили для IE в отдельные файлы: .navigation { margin: 10px 25px; } .lt-ie8.navigation { margin: 15px 30px; }
X-UA-Compatible <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> • chrome=1: если в IE установлено расширение ChromeFrame, использовать его • IE=edge: использовать последнюю доступную версию рендеринга документа в IE, а не Compatibility mode • Не нравится валидатору, но лечится добавлением одной строки в .htaccess
UTF-8 <meta charset="utf-8"> • В HTML5 можно писать так, без ненужных аттрибутов, которыебраузеры и так игнорировали
jQuery include • Либо с Google CDN, либо с локальной копии • Protocol-relative URL, поддерживается всеми браузерами
Modernizr • JS-библиотека • Определяет, какие возможности HTML5 и CSS3 поддерживает браузер клиента • После проверки добавляет CSS-классы к элементу <html>
Modernizr (2) • Тесты на поддержку конкретной фичидля подгрузкиpolyfill-скрипта: Modernizr.load({ test: Modernizr.geolocation, yep : 'geo.js', nope: 'geo-polyfill.js' }); • Коллекция полифиллов
.htaccess • Настройки для внешних файлов CSS и шрифтов • Gzip • Заголовки истечения срока годности разных файлов для кэширования • и т.д.
Build-script (Apache Ant) • Комбинирует и ужимает JS, CSS • Оптимизирует картинки (JPG, PNG) • Удаляет development-only код (console.log, тесты, профайлинг) • От базового до аггрессивного сжатия HTML • Делает проверку имён файлов для возможности тяжёлого кэширования (до года) • Обновляет HTML, прописывая имена новых ужатых js- и css-файлов • Обновляет HTML, заставляя использовать мини-версию jQuery • Tutorialи Wiki
Прочее • Асинхронная подгрузкаГуглАналитикс • IE6 background cache • IE6 прозрачность в PNG • Стили для печати • Стили-хелперы (image-replacement, hidden, clearfix) • Файлы для тестирования (QUnit) • И т.д.
О чём поговорим? • Чего не хватает CSS • Фичи препроцессоров • Распространённые заблуждения о них • Что выбрать?
Слабые стороны CSS • Изменить основной цвет на сайте • Ссылки • Бэкграунды • Кнопки • Тени • Каждое изменение требует времени • Если стили разбиты на несколько файлов, усложняется поддержка CSS-кода • Противоречит принципу DRY: в JS или PHP мы бы уже давно задали константу или написали функцию
Слабые стороны CSS (2) • Разбиение CSS на несколько файлов • Хорошо для разделения логики • global.css • print.css • typography.css • buttons.css • ... • Каждый @import или <link rel=“stylesheet” > означает дополнительный HTTP-запрос
Слабые стороны CSS (3) • Низкое реюзабилити • Все вендор-префиксы приходится прописывать вручную -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; -o-border-radius: 10px; border-radius: 10px;
Препроцессоры — что это? • LESS, Sass, Stylus, Closure Stylesheets • Практически тот же CSS • Добавлены новые конструкции для реализации новых возможностей: • Переменные • Функции • Условные операторы • Циклы • И т.д. • В конечном счёте всё написанное компилируется в самый обычный CSS-файл
Возможности препроцессоров • Основные фичиесть во всех препроцессорах • Они не добавляют новых возможностей (например, графических эффектов) • Улучшаютнаш рабочий процесс
Фичи: Переменные @my_blue: #4e6cb0; // LESS $my_blue: #4e6cb0; // Sass my_blue = #4e6cb0; // Stylus $primary_color: $my_blue; h1 { color: $primary_color; }
Фичи: Переменные (2) • Другие примеры (не только цвета): $font: Arial, Helvetica, sans-serif; $images-path: “../img/”; $font-size: 1.5em; $margin: 20px; $width: 80%; width: $width; background-image: url(#{$images-path}bg.png);
Фичи: Операции и цветовые функции • Математические функции: width: 25px * 4 + 100px / 2 – 50px; // 100px color: #990033 + #666; // #FF6699 • Цветовые функции: $light_blue : lighten($my_blue, 20%); $flashy_blue: saturate($my_blue, 50%); • Свои функции: @function my_func($param1, $param2) { @return $param1 * $param2 - 10; }
Фичи: Mixins • Функции, как lighten, возвращают значение • Миксины ничего не возвращают, только выдают CSS: @mixin border-radius($radius = 10px) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; } .button { @include border-radius(4px); }
Фичи: Вложенные правила .pop { .pop {} .pop-btn { => .pop .pop-btn {} } } .link { .link {} &:hover { => .link:hover {} } } • Не делайте вложенность более 4 уровней
Фичи: Импорты и минимизация • Импорты выглядят точно так же, как и в простом CSS • Работают без ущерба производительности @import “colors.scss”; @import “typography.sass”; @import “layout/two-column”; • Конечный CSS может быть как чистым, так и минимизированным #main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
Заблуждение: "Мой бэкэнд должен быть на Руби или на Node.js!" • Sass написан на Ruby • LESS и Stylus написаны на JavaScript • Это не значит, что Ruby и Node.js нужны на продакшен-сервере для использования препроцессоров • Они нужны на компьютере разработчика
Заблуждение: “Их сложно установить!" • На Линуксе и Node.js, и Ruby устанавливаются одной командой • На Винде скачивается инсталлятор, Next, Next, Next —и вуаля • На Маке Ruby уже предустановлен, с Node.js тоже проблем нет
Заблуждение: “Их сложно установить!“ (2) gem install sass sass watch <path>:<compiled_css> gem install compass compass create <path> compass watch <path>
Заблуждение: “Twitter Bootstrap использует LESS, он лучше!" • По словам создателя TB, LESS был выбран потому что: • Он компилировался быстрее, чем Sass (скорее всего, уже неправда, потому что у Sass есть кэширование) • Они друзья с создателем LESS, поэтому он может попросить его быстро добавить какую-то фичу или исправить баг • А вообще,есть Twitter Bootstrap на Sass
Какой препроцессор выбрать? • У Sass есть полноценные условные операторы и операторы циклов, у LESS — только guarded mixins • В LESS невозможна интерполяция названий свойств CSS: padding-#{$name}: $value; • Как результат этого, у Sass есть Compass, для LESS его невозможно сделать
Какой препроцессор выбрать? (3) • Активность разработки:
Sass • 2 синтаксиса • .scss : новый, почти как просто CSS • .sass : более ранняя версия, подход схож с CoffeeScript • Огромный набор крутых фич с Compass • Помимо своих прямых обязанностей даёт широкий простор для фантазии
Compass • По сути, набор миксинов и других хелперов: • CSS3 • Типографика • Спрайты • Много чего ещё @import “compass/css3/border-radius”; .button { @include border-radius(10px); }
Прибитый футер на Compass демонстрация
Дебаг • ПлагинFireSassдля Firebug compass watch <path> --debug-info
Полезные ссылки и туториалы HTML5 Boilerplate • HTML5 Boilerplate website • Видео внизу страницы Sass • Sass website • Sass Reference • http://css-tricks.com/sass-vs-less/ • http://verekia.com/slides/css-preprocessors • Конвертер из LESS в Sass • Compass website
Спасибо за внимание! Вопросы?