Всем привет! Как быстро летит время. Я даже не заметил, как я перешел от написания стилей с обычного Css на препроцессор Sass. А ведь раньше не понимал — что за Sass, для чего он нужен, это наверно для супер продвинутых профи в верстке. Да, использование препроцессоров это шаг на новый уровень в веб-разработке, но здесь ничего страшного и сложного нет и вы убедитесь в этом сами, дочитав данную статью до конца.

И так, чем хорош препроцессор и конкретно Sass? Я сразу скажу, что есть и другие, такие, как Less, Stylus и др. Все они работают по одному принципу, но у каждого свои особенности. Sass получил большую популярность у профессионалов в следствие чего изучение значительно упрощается. Просто чем популярнее технология, тем больше сообщество и тем более развернута документация.

Препроцессоры созданы для того, чтобы избавить разработчика от большинства рутинных задач при написании кода, тем самым повысив скорость и качество работы. Помимо CSS-препроцессоров существуют также и HTML-препроцессоры, например, Pug (Jade).

Структура статьи

Документация

Разработчиком Sass является француз Hugo Giraudel, проживающий в Германии с определенного времени. Естественно документация на английском языке, но я лично в ней неплохо ориентируюсь (важно знать технический английский). Но также есть перевод и на русский. Я бы советовал все же английскую версию, это для того, чтобы привыкать и изучать все глубже английский. Но русская тоже ничем не хуже.

  • Английская документация: http://www.sass-lang.com
  • Русская документация: https://sass-scss.ru

Компиляция Sass в Css

В качестве программного обеспечения для компиляции Sass в Css я использую плагин Sass для таск-менеджера . Вообще Sass является приложением (Gem) языка Ruby. Поэтому, если вы хотите обойтись без Gulp, то для компиляции в Css вам необходимо будет установить платформу языка программирования Ruby. Я не буду сейчас показывать как это делается, можете почитать об этом на официальном сайте .

Синтаксис - Sass, Scss

Сразу отмечу, что существует 2 синтаксиса написания кода: Sass и Scss.

Синтаксис Sass незначительно отличается от Scss. Scss похож больше на обычный код Css, а в Sass опущены фигурные скобки и точка с запятой между правилами. Также существует различие в написании некоторых функций и надо быть внимательным в том, какой синтаксис вы выбираете. Расширения файлов для Sass — *.sass, а для Scss — *.scss. Синтаксис Sass он более старый, а Scss появился позже, чтобы упростить изучение для новичков. Я сам начинал изучение данного препроцессора именно на Scss, так было проще его понять. Сейчас же я перешел на Sass, для меня он более удобен.

Если говорить о Sass, то его структура кода строится на основе отступов (ведь фигурных скобок в нем нет) и здесь следует быть внимательным, так как в качестве отступа может выступать, как табулятор (TAB — 4 пробела), так и обычные пробелы (обычно это двойной пробел). Я всегда использую табулятор.

Помните! Если вы используете табулятор в качестве отступа, то пробелы следует исключить, чтобы везде было одинаково. И наоборот — если используете пробелы, то табулятор следует исключить. Иначе, компилятор выдаст ошибку.

Sass

.maincontent .main-title font-size: 30px font-weight: 700 margin: 0 0 30px .description margin-bottom: 30px p color: #444444 font-size: 16px line-height: 22px

Scss

.maincontent { .main-title { font-size: 30px; font-weight: 700; margin: 0 0 30px; } .description { margin-bottom: 30px; p { color: #444444; font-size: 16px; line-height: 22px; } } }

В большинстве редакторов кода (например, Sublime Text) есть разметка отступов в виде полос, что не дает нам запутаться. В примерах ниже я буду использовать синтаксис Sass.

Упрощаем жизнь с помощью Sass

Вложенность правил

Вот чем мне приглянулся Sass с самого начала, так это как раз вложенностью css-правил одних в другие. Это здорово экономит время, а код получается структурируемым и легкочитаемым. Например, если мы хотим написать стили элементам определенного родительского контейнера, то нам в Css необходимо каждый раз указывать родительский класс, например вот так:

Main .title { font-size: 30px; color: #444; } .main .subtitle { font-size: 20px; } .main .description { font-size: 14px; margin-bottom: 30px; }

То есть мы везде указываем родительский класс.main , а это в свою очередь не совсем удобно. Используя Sass, можно записать следующим образом:

Scss

.main { .title { font-size: 30px; color: #444; } .subtitle { font-size: 20px; } .description { font-size: 14px; margin-bottom: 30px; } }

Sass

.main .title font-size: 30px color: #444 .subtitle font-size: 20px .description font-size: 14px margin-bottom: 30px

Согласитесь так смотрится намного аккуратнее, да и писать код можно быстрее, ведь родительский класс.main мы пишем всего один раз. Если вы хотите повторить за мной, не устанавливая Ruby и всякое подобное ПО можно воспользоваться онлайн-компилятором для демонстрации.

Вложенные свойства

Помимо вложенности правил в Sass существует возможность вложенности свойств. Например, вот как можно записать значения margin:

Sass

.main .title margin: top: 10px right: 15px bottom: 10px left: 15px

Css

.main .title { margin-top: 10px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; }

Привязка к селектору или конкатенация - знак &

Написание нашего кода можно ускорить и сделать его еще компактнее, применив конкатенацию (соединение) посредством символа — & . Как это работает? Например, у нас есть такие классы, как: .main-title , .main-subtitle , .main-description . В Sass данные классы можно записать следующим образом:

Main &-title font-size: 30px color: #444 &-subtitle font-size: 20px &-description font-size: 14px margin-bottom: 30px

Main-title { font-size: 30px; color: #444; } .main-subtitle { font-size: 20px; } .main-description { font-size: 14px; margin-bottom: 30px; }

С помощью символа & мы соединяемся к корневому классу, то есть в данном случае нет необходимости постоянно повторять корень.main . В тоже время следует иметь ввиду, что мы не создали дочерние элементы.

/* Ссылка */ a { color: red; } a:hover { color: blue; } /* Псевдоэлементы */ .main::before { content: ""; display: block; font-size: 20px; } .main::after { content: ""; display: block; font-size: 30px; }

Иногда нужно указать цепочку селекторов до текущего элемента. Можно конечно вынести его в корень, но чтобы не нарушать вложенность можно написать следующим образом:

Main .container & width: 700px

Container .main { width: 700px }

Переместив & после селектора, мы поменяли порядок стыковки, т. е. класс.container в данном случае является родительским.

Привязка к родительскому селектору, но на уровнь выше

Выше для примера я демонстрировал Sass код:

Main &-title font-size: 30px color: #444 &-subtitle font-size: 20px &-description font-size: 14px margin-bottom: 30px

Теперь представьте, что в блоке.main-title существует еще один элемент которому нужно явно указать стили, используя всю цепочку родителей. Я долго время просто указывал корневое название (в данном случае — .main), но это не очень удобно. Я стал ковырять документацию Sass и нашел решение. На самом деле все просто — нам необходимо объявить ссылку на родителя и использовать ее, там, где нужно.

Вот так я делал раньше:

Main &-title font-size: 30px color: #444 .main__icon // указываем корень.main, иначе, если использовать & будет стыковка к.main-title color: #444 width: 20px &-subtitle font-size: 20px &-description font-size: 14px margin-bottom: 30px

А теперь можно сделать так:

Main $self: & // ссылка на родителя &-title font-size: 30px color: #444 #{$self}__icon // вместо & используем ссылку на родителя color: #444 width: 20px &-subtitle font-size: 20px &-description font-size: 14px margin-bottom: 30px

Если заметили мы объявили ссылку на родителя — $self: & . Мне это чем-то напоминает ссылку на объект (this), который вызвал событие в javaScript. Теперь в нужно месте мы можем просто его вызвать #{$self} . Вот оказывается как все просто, а я голову ломал и думал, что нет решения этой проблемы в Sass.

Main-title { font-size: 30px; color: #444; } .main-title .main__icon { color: #444; width: 20px; } .main-subtitle { font-size: 20px; } .main-description { font-size: 14px; margin-bottom: 30px; }

Шаблоны-заготовки

Зачастую бывает такое, что несколько элементов имеют одну базу стилей, но отличаются между собой лишь несколькими правилами. Возьмем к примеру кнопки. Если брать один размер кнопок, то они могут отличаться между собой только цветом: красные, зеленые, серые и т.д. Если использовать чистый Css, то придется в базовых стилях через запятую указывать все цвета кнопок или создать базовый класс. Но в Sass это делается намного проще:

%button background-color: #666 border: 1px solid #666 padding: 0 20px font-size: 15px line-height: 40px height: 40px .button-green @extend %button background-color: green border-color: green .button-red @extend %button background-color: red border-color: red

Button-green, .button-red { background-color: #666; border: 1px solid #666; padding: 0 20px; font-size: 15px; line-height: 40px; height: 40px; } .button-green { background-color: green; border-color: green; } .button-red { background-color: red; border-color: red; }

Шаблоном выступает в данном случает селектор %button (об этом говорит знак — %). Это удобно тем, что сам селектор шаблона нигде не участвует, а его стили наследуются другими селекторами посредством директивы — @extend . Данный шаблон можно использовать сколько угодно раз, сокращая тем самым количество кода.

SassScript

В Sass, как и в языках программирования имеют место быть такие возможности, как: создание переменных, арифметические операции (сложение, вычитание, деление, умножение и т.д.), итерации (циклы), функции (миксины) и многое другое. То есть Sass это своего рода некий язык программирования, который призван опять таки упростить написание кода и ускорить работу в разы.

Переменные

Переменная в Sass начинается со знака $ , а имя пишется латиницей, например: $color . Следует отметить, что знаки: «» и «_ » взаимозаменяемы. К примеру, если назвали $color-red , то можно вызвать и $color_red . Определяется переменная следующим образом: $название: значение , например: $color: #f6f6f6 .

Переменная объявленная вне каких либо уровней вложенности, доступна глобально, т.е. можно использовать везде. Если же вы определили переменную в каком либо уровне вложенности селектора, то она будет доступна только на данном уровне. Чтобы она работала глобально во всем документе необходимо указать ключевое слово !global .

Title $font-size: 10px !global font-size: $font-size .subtitle font-size: $font-size

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

Директивы

@extend

Данную директиву мы затронули выше, когда изучали шаблон-заготовку. Закрепим еще раз знания. С помощью @extend мы можем скопировать правила любого селектора. Например, при верстке может быть так, что элемент «А » и элемент «Б » могут быть схожи по внешнему виду. В данном случае можно написать правила элементу «А», а для «Б» просто скопировать стили элемента «А», слегка переопределив нужные свойства.

Block_a background-color: #cccccc border: 5px solid #999999 padding: 20px font-size: 30px height: 150px width: 150px .block_b @extend .block_a padding: 15px

Block_a, .block_b { background-color: #cccccc; border: 5px solid #999999; padding: 20px; font-size: 30px; height: 150px; width: 150px; } .block_b { padding: 15px; }

В данном примере мы сверстали 2 одинаковых квадрата. У квадрата «Б» мы переопределили только отступ padding: 15px . Вот так работает @extend. Я довольно часто пользуюсь данной директивой.

@import

Данная директива позволяет объединять несколько файлов стилей в один. Это очень удобно, тем более, если проект большой. Не стоит путать с директивой, которая существует в Css — @import . В Css обязательным атрибутом является — url() .

На самом деле удобнее писать стили в разных файлах и предназначение у каждого свое. Например, весь каркас страницы можно разделить на регионы: header.sass, sidebar.sass, footer.sass. Собрать все можно в главном файле main.sass, как раз используя @import. Файлы регионов можно указать также через нижнее подчеркивание в начале имени файла, например так: _header.sass, _sidebar.sass, _footer.sass. Такие файлы называются фрагментами. При импорте фрагментов не обязательно указывать расширение файла.

Простой импорт

@import "header.sass" @import "sidebar.sass" @import "footer.sass"

Импорт фрагментов

@import "header" @import "sidebar" @import "footer"

Файлы фрагментов могут быть с расширениями: *.sass , *.scss или *.css . Например, главный файл может быть с расширением *.sass , а шапка сайта, к примеру с расширением *.scss . То есть не важно какое у вас расширение главного файла. Следует отметить, что при импорте переносятся все переменные и миксины (о них поговорим ниже) в главный файл, в который происходит импорт.

Также, можно указать импорт нескольких файлов через запятую: @import «header», «sidebar», «footer».

Имейте ввиду, что импорт происходит в том месте, где вы указали директиву @import . Обычно это делают в начале документа.

@at-root

Директива @at-root говорит сама за себя и если переводить на русский, то будет звучать так — «от корня» . Иными словами мы переносим селектор в корень, отменяя цепочку родительских селекторов. Тут конечно можно задать вопрос — «А зачем нужна эта директива, если можно перенести селектор в корень в ручную?». Ответ прост — удобство написания кода, не нарушая структуру. Когда вы научитесь работать с Sass в полной мере вы это поймете.

Main &-title font-size: 30px color: #444 @at-root .main__icon color: #444 width: 20px

Main-title { font-size: 30px; color: #444; } .main__icon { color: #444; width: 20px; }

Управляющие директивы и выражения

Директива @if

Данная директива выполняет стили, если выражение, заключенное в ней возвращает любое значение кроме false и null .

$color: green .header @if $color == green background-color: green @else if $color == blue background-color: blue @else background-color: #f6f6f6

Header { background-color: green; }

Те, кто знаком хотя бы с основами языка программирования (например, javaScript или Php) разобраться будет не сложно. Здесь суть та же самая, главное знать синтаксис написания кода.

Директива @for

В языке программирования (опять же в Javascript или Php) с помощью For можно задать цикл. В Sass данная директива выполняет тоже самое — создает цикл. Для каждой итерации (повторения) используется переменная-счетчик, которая изменяет данные вывода.

Директива имеет 2 формы написания: 1. @for $var from <начало> through <конец> и 2. @for $var from <начало> to <конец> . Если вы хотите, чтобы последняя цифра была включена в цикл, то используйте «through «. Давайте рассмотрим пример:

@for $i from 1 to 6 .elem-item-#{$i} background-image: url("images/image-#{$i}.jpg")

Elem-item-1 { background-image: url("images/image-1.jpg"); } .elem-item-2 { background-image: url("images/image-2.jpg"); } .elem-item-3 { background-image: url("images/image-3.jpg"); } .elem-item-4 { background-image: url("images/image-4.jpg"); } .elem-item-5 { background-image: url("images/image-5.jpg"); }

Для указания конечного значения я использовал ключевое слово «to «. При таком раскладе цикл заканчивается на цифре — 5 . Обратите внимание насколько компактным выглядит код Sass.

Директива @each

Директива @each также, как и @for выводит значения в цикле и удобен тем, что помимо цифр можно перебирать конкретные значения. Давайте возьмем вышеприведенный цикл и изменим его на какие либо значения.

@each $bgItem in animal, lake, sea, landscape, nature .elem-item-#{$bgItem} background-image: url("images/image-#{$bgItem}.jpg")

Elem-item-animal { background-image: url("images/image-animal.jpg"); } .elem-item-lake { background-image: url("images/image-lake.jpg"); } .elem-item-sea { background-image: url("images/image-sea.jpg"); } .elem-item-landscape { background-image: url("images/image-landscape.jpg"); } .elem-item-nature { background-image: url("images/image-nature.jpg"); }

В данном случае не создается переменная-счетчик, а количество итераций зависит от количества созданных значений после ключевого слова «in «. Значения выводятся через переменную (в данном примере — $bgItem), название которой может быть произвольным.

Миксины (функции)

Миксины (примеси) — это своего рода функция, как в языке программирования, которая призвана избавить от повторяющегося кода. Миксины могут содержать целые фрагменты стилей, разрешенные в Sass. Давайте рассмотрим пример, для большей наглядности.

@mixin align-center position: absolute top: 50% left: 50% transform: translate(-50%, -50%) .container @include align-center

Создается миксин директивой @mixin , далее через пробел следует имя миксина, а также опционально передаваемые параметры. Сразу отмечу, что знаки дефиса (-) и нижнего подчеркивания (_) в имени миксина взаимозаменяемы. Миксин может содержать в себе не только правила, но и селекторы. Выше я привел пример элементарного миксина без параметров.

Вызывается миксин директивой @include и далее через пробел указываем имя созданного миксина. В примере выше — это центрирование блока по оси X и по оси Y с помощью абсолютного позиционирования. Если такое приходится применять часто, то согласитесь легче вызвать просто миксин, нежели писать стили центровки снова и снова.

Теперь давайте рассмотрим миксин с параметрами (аргументами).

@mixin border($width, $color) border: width: $width style: solid color: $color .square @include border(2px, #ccc)

Square { border-width: 2px; border-style: solid; border-color: #ccc; }

Как видим, после названия миксина в скобках мы задаем аргументы, в данном случае — это ширина бордюра и цвет. Это простейший миксин, который я привел для наглядности. На практике же можно встретить более сложные миксины с использованием различных условий и переменных. Но не будем сейчас все усложнять, надо всегда начинать с чего-то малого и простого, а потом уже двигаться по мере продвижения вверх.

На этом я хочу завершить свой небольшой обзор препроцессора Sass. Почему небольшой? Да потому что это далеко не все, что я вам поведал. Вообще, используя вышеизложенное, вы можете смело уже сейчас начать пользоваться Sass вместо Css. Более подробнее вы сможете изучить Sass, прибегнув к документации , которую я приводил выше.

Ну что ж, всем спасибо за внимание! Как всегда, вопросы задаем в комментариях и подписывайтесь либо на телеграм канал , либо на рассылку по email (форма в сайдбаре справа), чтобы не пропустить ничего интересного.

До встречи в других моих постах…

Перевод статьи: The Absolute Beginner’s Guide to Sass.
Andrew Chalkley.

Что такое SASS?

SASS является аббревиатурой от Syntactically Awesome Stylesheets — метаязык на основе CSS, название которого можно перевести как «CSS c превосходным синтаксисом» , разработанный Хемптоном Кэтлином (Hampton Catlin).

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

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

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

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

В качестве примера возьмем следующий фрагмент CSS кода:

#skyscraper_ad
{
display: block;
width: 120px;
height: 600px;
}

#leaderboard_ad
{
display: block;
width: 728px;
height: 90px;
}

Который эквивалентен вот такому SASS:

#skyscraper_ad
display: block
width: 120px
height: 600px

#leaderboard_ad
display: block
width: 728px
height: 90px

В SASS для обозначения вложенности фрагментов кода используется интервал (отступ в начале следующей строки) равный двум пробелам. (*В последнем сниппете для наглядности я выделил эти пробелы красным фоном. )

Теперь, имея представление о том, как создается SASS код, давайте рассмотрим те вопросы, которые делают его таким превосходным .

Переменные.

В SASS для объявления переменной необходимо перед ее именем использовать символ доллара $ . И если имя вашей переменной, допустим, red , то после двоеточия мы можем указать соответствующее ей вот такое значение:

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

Так, в следующем примере цвет шрифта в параграфах будет тоже красным, но темнее, чем используемый в h1 заголовках:

$red: #FF4848
$fontsize: 12px
h1
color: $red

p
color: darken($red, 10%)

С переменными вы можете производить арифметические действия, такие как сложение и вычитание, при условии, что используемые для этого значения имеют один и тот же тип данных. Если, к примеру, нам необходимо применить более темный оттенок, то все что нам нужно сделать, это вычесть из уже используемого в коде значения цвета, хранящегося в переменной, небольшое шестнадцатеричное HEX-значение, равное, скажем, #101 . Это же касается и случая, когда необходимо изменить значение размера шрифта, допустим, увеличить на 10 пикселей, для этого мы просто прибавляем недостающие пиксели:

p.addition_and_subtraction
color: $red — #101
font-size: $fontsize + 10px

Вложенность.

В SASS вложенность бывает двух типов.

Вложенность селекторов.

Это первый тип вложенности, который схож с тем, какой используется для структурирования HTML кода:

$fontsize: 12px

Speaker
.name
font:
weight: bold
size: $fontsize + 10px
.position
font:
size: $fontsize

Если вы взгляните на сгенерированный в результате CSS код, то какие-либо комментарии будут излишни. Путем вложенности класса .name в класс .speaker (*тем же способом — с помощью двух пробелов в начале следующей строки ) создается CSS селектор .speaker.name . Это же касается и следующего имени класса .position , расположенного после декларирования свойств для первого селектора, в результате вложенности которого образуется второй селектор .speaker.position :

Speaker.name {
font-weight: bold;
font-size: 22px; }
.speaker.position {
font-size: 12px; }

Вложенность свойств.

Второй тип вложенности позволяет структурировать свойства с одним префиксом (* font-family , font-size , font-weight или border-style , border-color , border-radius и т.д. ):

$fontsize: 12px

Speaker
.name
font:
weight: bold
size: $fontsize + 10px
.position
font:
size: $fontsize

В представленном выше примере мы используем объявление родительского, универсального свойства font: и далее на новой строке после двухпробельного отступа указываем вторую часть свойства, которая обычно находится после дефиса.

То есть если мы укажем свойство font: , на следующей строке после двух пробелов свойство weight: , то в результате это будет эквивалентно хорошо знакомому нам свойству font-weight .

Speaker.name {
font-weight: bold;
font-size: 22px; }
.speaker.position {
font-size: 12px; }

В модуле обеспечивается поддержка всех дефис-содержащих свойств.

Такого рода вложенность является замечательным способом организации и структурирования вашего CSS кода и позволяет избежать его нежелательного повторения. (*DRY — «Don’t Repeat Yourself» — «Не повторяйтесь». Ситуации, когда при CSS форматировании определенных элементов их стили повторяются и/или переопределяются в других местах, что усложняет читабельность и обслуживание кода ).

Миксины.

Еще одной прекрасной возможностью SASS являются миксины .

Миксины позволяют вам повторно использовать целые фрагменты SASS кода и при необходимости даже передавать им аргументы. И что немаловажно, вы также можете указывать их исходные значения.

Для того чтобы определить миксин используйте специально зарезервированное в SASS ключевое слово @mixin , а после него укажите выбранное вами имя миксина. Если есть необходимость в аргументах, то перечислите их в круглых скобках. Значения, устанавливаемые для аргумента по умолчанию, указываются при определении миксина через двоеточие. (*Другими словами, миксины представляют собой CSS функции. )

Процедура использования миксинов очень проста – после ключевого слова @include укажите имя нужного миксина и перечислите в скобках необходимые параметры, если таковые имеются.

Взгляните на следующий пример:

@mixin border-radius($amount: 5px) /* определяем миксин */
-moz-border-radius: $amount
-webkit-border-radius: $amount
border-radius: $amount

h1 /* используем миксин */
@include border-radius(2px)

Speaker
@include border-radius

Этот SASS после компиляции будет преобразован в представленный ниже CSS код:

h1 {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2x; }

Speaker {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px; }

Для заголовка h1 мы явно указали значение радиуса закругления углов границы, но для элемента с именем класса .speaker мы этого не делали, поэтому было взято дефолтное значение 5px.

Наследование селекторов.

Другой превосходной особенностью SASS синтаксиса является способность селекторов наследовать все стили, определенные для других селекторов. Чтобы воспользоваться такой возможностью, необходимо использовать ключевое слово @extend , после которого указать селектор, все свойства которого вы хотите унаследовать:

h1
border: 4px solid #ff9aa9

Speaker
@extend h1
border-width: 2px

Что будет скомпилировано в:

h1,.speaker {
border: 4px solid #ff9aa9; }

Speaker {
border-width: 2px; }

(*Заметьте, декларация border: 4px solid #ff9aa9; не повторяется в рамках правила с селектором .speaker , а вместо этого к первому правилу добавляется второй селектор. Другими словами, дублирования кода нет. )

Попробуйте SASS в действии.

Онлайн.

Вы можете познакомиться с SASS онлайн без предварительной установки модуля на свой локальный компьютер.

Но до того, как вы начнете экспериментировать, в нижней области страницы выберите опцию «Indented Syntax» .

Установив на ПК.

Сам SASS является приложением (gem ) платформы Ruby. Поэтому для его установки без предварительной инсталляции самой платформы и менеджера пакетов этого языка программирования RubyGems не обойтись. После успешной установки самой платформы и менеджера выполните в консоли следующую команду:

gem install sass

SASS модуль может быть использован как инструмент конвертирования ваших SASS файлов в файлы CSS формата в режиме командной строки.

Это можно, к примеру, сделать, введя следующую команду:

sass --watch sass_folder:stylesheets_folder

Где sass_folder — это путь к папке, содержащей SASS файлы (то есть с расширением.sass), а stylesheets_folder — путь к папке, в которой будут сохраняться получающиеся после компиляции, результирующие CSS файлы. Команда --watch сообщает модулю, что он должен следить (watch ) за любыми изменениями в указанной папке и если таковые имеются, то после их сохранения конвертировать исходные.sass файлы в эквивалентные им.css файлы.

Обратное конвертирование CSS в SASS.

Вы можете начать использование SASS с того, что сконвертируете стили, используемые в своих уже функционирующих проектах в этот формат с помощью утилиты "sass-convert".

Для этого в командной строке ведите путь к папке, содержимое которой необходимо конвертировать (*то есть просто перейдите в нужную директорию, в которой находятся исходные файлы ). После чего запустите упомянутую выше утилиту и сообщите ей следующие параметры:

sass-convert --from css --to sass –R.

Где флаг -R задает рекурсивный способ выполнения операции. А следующая за ним точка . означает, что получаемые в результате конвертации.sass файлы будут сохранены в текущей директории. (*При необходимости вместо точки можно указать путь к папке, в которой нужно сохранить результирующие файлы. )

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

Итак, нам понадобится:

1. Почта (2 шт.)

Я бы советовал делать почты на яху, так как на гмаил в любой момент могу затребовать верификацию к почте, и вам необходимо будет принять смс. Это не всегда удобно. Так что регеам две почты на Яху с абсолютно рандомным именем, если не хватает фантазии находим любой генератор и вперёд.

2. Нам потребуется Карта (СС в дальнейшем)

Я думаю вы знаете где их достать. Покупаем карту по такому критерию. Бренд = VISA, Тип = Credit, Уровень = Platinum, Валид = 64 – 100. Если берёте на байпасе, то чекните её на валид, если карта живая, то обязательно подождите минут 15 перед вбивом, пусть отдохнёт. По уровню берите лучше кредитки, там как правило баланс есть нежели на дебетовках.

3. Нам нужен посред. А точнее адрес в США, куда мы будем отправлять товар купленный в магазине.

По поводу регистрации на посреде. Покупаете скан у селлеров. Из сети лучше не брать, так как посред в любой момент можеть запросить ваши доки, их конечно можно отрисовать, но зачем переплачивать. Так что берём комплект доков у селлера и регаем по этим данным акк на посредние. Обязательно проверьте валидность паспорта на сайте фмс, так как при отправке потом могут возникнуть проблемы.

4. Также нам нужен, туннель,носок, впн, дедик. У кого на сколько хватит фантазии. Ничего под зип карты не нужно подбирать, самое главное условие чтобы он был ЧИСТЫЙ. Идём допустим на ipsocks и берём какой нибудь туннель копируем ip и идём на сайт ipchecking.com смотрим его на чистоту, если всё хорошо, одеваем его и идём на ip-score.com проверяем туннель на наличие блеков, если всё чисто подкручиваем времечко на системе, замыкаем Web RTC и вперёд.

5. И самое главное, нам нужен магазин, куда мы будем вбивать. Сейчас расскажу как их искать без всяких парсеров и прочей лабуды.

Накидываем айпи юсы, переходим на гугл и в поисковике вставляем эту золотую фразу inurl:/giftcertificates.php и всё. Перед ней пишите то что вас интересует и вперёд. (wear/nike/adidas) вообщем насколько хватит фантазии. В настройках поиска также можете задать домен сайта, язык сайта, страну магазина, чтобы не искать лишние шопы.

Гугл нам выдаст то что мы ищем, а именно те шопы, которые сделаны на движке bigcommerce. С ними мы и будем работать.

Сейчас расскажу как подбирать шопы .

Самое главное что нас интересует в первую очередь это кнопка «Gift Certificate».

На примере данного шопа. Чаще всего она сверху, иногда бывает что внизу, но она должна быть. Просто некоторые магазины их просто убирают с сайта. Также можете посмотреть на «Алексу»

Это так называем рейтинг шопа, чем Алекса ниже тем шоп популярнее, так что не нужно лезть в топовые шопы, я делал вбивы в магазины с Алексой в 22млн. и всё отлично, а также заходили ордера в магазы где алекса была 300к. так что лучше набить руку на менее крупных шопах. SEO quake это дополнение для браузера, которое покажет вам эту самую алексу. И обязательно смотрим на мерч шопа, я думаю вы знаете что это. Если видим мерч палки или при оплате вас перекидывает на него, то не тратим время, закрываем шоп и идём в другой. Их немного, но встречаются.


Выглядит это примерно так.

Так вроде совсем необходимым разобрались, теперь переходим непосредственно к работе.

Находим шоп в которой будем вбивать и заходим в него. Адрес в поисковик вставляйте и переходите через поиск в шоп. Бродить по нему не надо, пару минут повисели в шопе и сразу жмём на Gift Certificate. Сейчас расскажу как это заполнять.


Теперь по порядку:

Recipients name – это имя получателя карты, т.е. то имя на которое вы потом будете отоваривать карту и соответственно отправлять на посредника. Так что тут указываем имя на которое регестрировали акк на посреде. Почта соответственно тоже получателя. На неё придёт письмо с гифтом и с неё потом будете отоваривать карту, так что доступ не теряйте.

Your name – тут соответственно имя и почта отправителя. Имя пишем с карты, а почту указывает ту, которую вы сами регестрировали.

Amount – это номинал сертификата. Тут в первую очередь смотрим на товар, и его стоимость, и его количество на сайте. Товара должно быть много. Если средний ценник то смело ставьте сумму в 300 баксов. Если ценник повыше то можно поставить и 500 и 600 и 800, но опять же не забывайте что на карте может не хватить баланса. Я по стандарту ставлю 300-600 и ордера заходят как по маслу.

Тему карты всегда ставлю день рождение и в сообщение Хеппи Бездэей по стандарту.

Так, тут всё. Жмём добавить в корзину и идём дальше.


Здесь жмём Proceed to checkout, на палку ни в коем случае не нажимаем. Дальше.


Регистрироваться не нужно, жмём на гостя и переходим дальше.


Тут всё предельно просто, все данные кроме почты берём с карты которую купили. Телефон можно поменять где нибудь одну цифру. Далее нажимаем Bill to this address.


Тут ничего не трогаем идём далее.

Если Вас перекидывает на палку как на скрине ниже, то как я и говорил уходим с этого магаза.



Тут все данные заполняем с карточки и нажимаем оплатить. Если всё хорошо и карта живая будет написано за покупку и номер ордера, чем номер больше тем лучше, это показывает сколько заказов было в этом магазине. Если всё прошло успешно, идём на почту получателя и там уже должно лежать письмо с долгожданной картой. В этом вся и прелесть сайтов на движке бигкоммерц, что гифты падают инстантом. За пару дней я делаю гифтов где то на 3к$ без проблем и сумму легко можно увеличить. Из 10 заказов, гифты падают в 80% случаев. Гифт выглядит примерно так. Тот код что сверху, потом вы его будете вставлять при отоваривании. Так что не теряйте.


Самое сложно позади теперь эту карту нужно отоварить .

Отоваривать нужно не сразу, и обязательно по времени ЮСЫ. Т.е. если с утра вы получили гифт, то часиков в 6-7 по мск можно смело идти отоварить его. Тут опять же нам нужен будет чистый туннель и в идеале если он будет под зип посреда, т..е. адреса на который будет отправляться товар. Если нет туннелей под зип берём под город, если нет, то берём под штат, но обязательно чистый. Больше нам ничего не нужно. Идём в шоп.

Я не советую брать несколько вещей одних позиций, например 5 пар кроссовок или 3 футболки, берите всего по немногу. Про электронику можно забыть, её высылают крайне редко. Всё остальное можно брать.

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


Тут все данные заполняем с данных адреса которого вам дали на посреднике.

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


Тут выбираем способ доставки. Я как правило ставлю оставляю немного денег и выбираю самую быструю доставку, чтобы это всё как можно быстрее приехало на посредника. Далее.


Здесь мы только вставляем код, который был на подарочной карте, и сумма обнуляется. Жмём оплатить и всё. Вы стали счастливым обладателем того что было у вас в корзине.

Высылают как правило 6-8 шопов из 10. Отправка происходит у всех по-разному, кто-то может на след. День отправить, а кто-то через 2-3 дня. Если магазин затягивает с отправкой, не стесняйтесь пишите им. Указывайте номер ордера и спрашивайте какого такого, они не отправляют заказ. Это помогает. Если шоп вам всё выслал, через какое то время вы можете вернуться ещё раз, только адрес нужно указать другой и почты соответственно тоже. Чуть не забыл. Работать лучше с воскресенья по среду-четверг. На выходные лучше не вбивать. Ну я думаю вы сами разберётесь со временем что к чему.

»

Как php программисту хорошо зарабатывать дома?

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

Но возможность работать дома обладает больше плюсов, чем минусов.

Плюсы

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

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

Минусы

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

Заработок на своих скриптах

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

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

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

Свои и совместные проекты

Хорошо для успешного заработка создать свой сайт. Есть много возможностей заработать с помощью своего сайта. Если вы хорошо раскрутите его, то можно размещать туда скрипты на продажу. Совместные проекты расширят ваши возможности, а это хорошо для успеха программирования дома. Поэтому ищите партнеров или не отказывайтесь от предложений создать проект совместно.

На свой сайт вы должны обязательно добавлять возможности, которые привлекают внимание. Сайт может обладать обычным простым видом, но при этом со своей изюминкой. Личный сайт способствует увеличением клиентов. Они увидят, как работают ваши скрипты, если они не сильно долго грузятся, интересные в использовании, и самое главное оригинальные, не похожие не на что. То вы обретете успех.

Заработак на заказах

Для этого достаточно зарегистрироваться в различных бирж для фрилансеров и искать заказы. Выставлять свое портфолио сделанных работ. Но будьте осторожны, в мире есть не честные люди и чтобы вы не попались на обман, сначала покажите работу, которая расположена на вашем сервере (кстати, в этом случае Вам понадобится аренда vps http://nkvd.pro/vps/), а потом уже если вам заплатят часть, то половину перенесите на их сервер, так и со второй частью. Этот метод заработка считается прибыльным, но зависит от степени ваших знаний и умений. Так же зависит от отзывов ваших заказчиков. Для успеха в этом способе заработка, выполняйте работу честно и качественно. Вы должны уметь общаться с заказчиками, четко объяснять, что вы умеете, а что нет.

Это далеко не весь список заработка php –программиста, но благодаря этим способом заработка, которые написаны выше, вы уже сможете зарабатывать, не выходя при этом из дома. На начальном этапе это будет большим достижением. Главное не останавливайтесь на достигнутом. Постоянно совершенствуйтесь и создавайте проекты, которые будут приносить вам не только хороший доход, но и удовольствия.


Об авторе

Как php программисту хорошо зарабатывать дома?

Хочу разместить в помощь начинающим php программистам небольшую памятку. Что и как нужно делать чтобы изучить php и начать зарабатывать на своем ремесле. Если читающие хотят дать свой совет — прошу в камменты.

* Начнем с одного полезного тезиса — изучить php можно не тратя абсолютно никаких денег. Все необходимые материалы по php можно найти в сети, все ответы на вопросы можно найти на форумах… не нужно ходить на курсы, не нужно покупать книги (вообще книги стоит покупать если, лень искать материал в интернете) , не нужно тратить никаких денег.
* Изобретайте велосипеды. Всегда пишите код самостоятельно — это поможет вам в дальнейшем. Если вам нужна гостевая книга — напишите ее, не используйте готовые варианты, даже если вы просмотрите и поймете ее код, это не заменит самого программирования, поиска багов, отладки, решения проблем, связанных с написанием. В последствии, когда вы станете профессионалом, можно и даже нужно будет использовать сторонний код, но на этапе изучения это окажет вам плохую услугу. Можно пользоваться примерами и использовать чужой код как способ решить задачу или найти правильный алгоритм.
* Создавайте “домашние странички”. Это хорошая тренировка. Создание и развитие своей “домашней страницы” заставит вас постоянно совершенствовать свои умения, искать пути для улучшения сайта, соревноваться с другими обладателями “домашних страниц”.
* Объединяйтесь в группы. Попробуйте создать какой-нибудь проект не один, а объединившись с другими программистами. Уменее работать в команде, понимать чужой код и правильно общаться с коллективом поможет вам найти хорошую работу. Многие фирмы ставят одним из главных требований при трудоустройстве — уменее работать в команде.
* Не бросайте проект на пол пути. Старайтесь всегда доводить начатый проект до конца. Даже если надобность в нем отпала. Чем больше у вас законченных проектов, тем больший список работ вы можете написать в своем резюме. А ведь именно на готовые и законченные вещи работодатель смотрит в первую очередь.
* Беритесь за “копеечную” работу. Если ваш послужной список не богат, не стоит отказываться от малооплачиваемой работы. Приведу пример из жизни, когда я только начинал программировать за деньги я вышел на работу в он-лайн игре. Предлагали в общем копейки — 2 000 в месяц. Но я взялся и по мере того как работал все больше изучал особенности веб программирования. Через семь месяцев моя зарплата была 10 000 рублей. А сколько опыта я приобрел — просто не счесть.
* Создавайте большие проекты. Наличие в вашем послужном списке больших проектов — огромный вам плюс.
* Не задерживайтесь на работе, если вам стало не интересно. Если ваша работа превратилась в рутину и не приносит ничего нового, никаких знаний — бросайте ее. Это путь в никуда. Всегда цепляйтесь только за интересные проекты.
* Повышайте свои “общие” знания. Не стоит зацикливаться только на php, сейчас работодатель требует от программиста не только создания кода, но и уменее верстать страницы, настраивать сервер, составлять документацию, работать с javascript и многое другое. По большому счету сейчас никому не нужны просто веб программисты, а нужны веб мастера.
* Изучайте новые технологии. Новые технологии, такие как Ajax, всегда будут вашим козырем. Они производят на работодателя магическое действие.

Пожалуй на сегодня хватит. Есть еще много советов, но я дам их в других постах, если будет спрос 🙂

Хорошо Плохо

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