Введение

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

Работа со шрифтами

Первый и один из самых важных моментов в разработке – это подключение шрифтов. Никогда не любил по 100 раз все писать и хотелось быстренько подключать все необходимое.

// Подключение шрифтов
.font(@family, @filename: @family, @weight: normal, @style: normal) {
    @font-face {
        font-family: @family;
        src:url('../fonts/@{filename}.eot');
        src:url('../fonts/@{filename}.eot?#iefix') format('embedded-opentype'),
        url('../fonts/@{filename}.woff') format('woff'),
        url('../fonts/@{filename}.ttf') format('truetype');
        font-weight: @weight;
        font-style: @style;
    }
}

Использование в работе: .font(Roboto,Roboto Bold,bold,notmal);

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

Следующий вариант уже перестал использоват из-за массовой поддкржки браузеров единиц измерения rem. Однако если нужно, то можете смело брать и пользоваться.

.f(@size) {
    font-size: @size*1px;
    font-size: (@size / 10rem);
}

Использует так: .f(16);в результате вы получите две строки, в первой будет введённое значение в пикселях, второе уже в rem. Однако не зебудьте у HTML выставить значение font-size: 62,5% чтобы все как надо работало.

Адаптивная верстка и быстрая работа с @media

Сразу с места в карьер:

// Адаптив
.r(@size, @rules) {
    @media screen and (max-width: @size*1px) {
        @rules();
    }
}
.lg(@rules) {
    @media screen and (max-width: 1200px) {
        @rules();
    }
}
.md(@rules) {
    @media screen and (max-width: 992px) {
        @rules();
    }
}
.sm(@rules) {
    @media screen and (max-width: 768px) {
        @rules();
    }
}
.xs(@rules) {
    @media screen and (max-width: 576px) {
        @rules();
    }
}

Как это все использовать на практике:

Пишем

.wrapper {
    font-size: 1.6rem;
    border: 1px solid red;
    background-color: #f1f1f1;

    .r(1000, {
        font-size: 2rem;
        border: none;
        background-color: red;
    });
}

В результате получаем в css следующую запись.

.wrapper {
    font-size: 1.6rem;
    border: 1px solid red;
    background-color: #f1f1f1;
}
@media screen and (max-width: 1000px) {
    .wrapper {
        font-size: 2rem;
        border: none;
        background-color: red;
    }
}

Это был лишь первый миксин из списка, если в западло писать размер ширины точки остановки, то в списке представлены примеры для bootstrap сетки.

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

Готовый файл _mixin.less

// Адаптив
.r(@size, @rules) {
    @media screen and (max-width: @size*1px) {
        @rules();
    }
}
.lg(@rules) {
    @media screen and (max-width: 1200px) {
        @rules();
    }
}
.md(@rules) {
    @media screen and (max-width: 992px) {
        @rules();
    }
}
.sm(@rules) {
    @media screen and (max-width: 768px) {
        @rules();
    }
}
.xs(@rules) {
    @media screen and (max-width: 576px) {
        @rules();
    }
}

// Размер шрифта в rem
.f(@size) {
    font-size: @size*1px;
    font-size: (@size / 10rem);
}

// Быстрый квадрат
.sq(@size) {
    height: @size*1px;
    width: @size*1px;
}

// базывые параметры для before и after
.bf() {
    position: absolute;
    content: ' ';
}

// Цвет placeholder
.ph(@color) {
    &::-webkit-input-placeholder {
        color: @color
    }

    &:-moz-placeholder {
        color: @color
    }

    &::-moz-placeholder {
        color: @color
    }

    &:-ms-input-placeholder {
        color: @color
    }
}

// Подключение шрифтов
.font(@family, @filename: @family, @weight: normal, @style: normal) {
    @font-face {
        font-family: @family;
        src:url('../fonts/@{filename}.eot');
        src:url('../fonts/@{filename}.eot?#iefix') format('embedded-opentype'),
        url('../fonts/@{filename}.woff') format('woff'),
        url('../fonts/@{filename}.ttf') format('truetype');
        font-weight: @weight;
        font-style: @style;
    }
}

// Transition
.trs(@time: 0.3, @type: ease-in, @for: all) {
    -webkit-transition: @for @type @time*1s;
    -moz-transition: @for @type @time*1s;
    -o-transition: @for @type @time*1s;
    transition: @for @type @time*1s;
}

// Черно-белое изображение
.gr() {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: gray;
}

// Цветное изображение
.grh() {
    -webkit-filter: grayscale(0%);
    -moz-filter: grayscale(0%);
    -ms-filter: grayscale(0%);
    -o-filter: grayscale(0%);
    filter: grayscale(0%);
    filter: none;
}

// Градиент
.gradient(@from: #000, @to: #fff) {
    background-color: @from;
    background-image: -webkit-gradient(linear, left top, left bottom, from(@from), to(@to));
    background-image: -webkit-linear-gradient(top, @from, @to);
    background-image: -moz-linear-gradient(top, @from, @to);
    background-image: -o-linear-gradient(top, @from, @to);
    background-image: linear-gradient(to bottom, @from, @to);
}

// Translate
.trft(@x, @y: @x) {
    transform: translate(@x * 1%, @y * 1%);
}

// Фоновое изображение
.bgi(@image, @type: jpg) {
    background-image: url('../img/@{image}.@{type}');
}

Если тебе есть что добавить, то пиши в комментариях все эти моменты. А я же прощаюсь, не забывай делиться записью в соц. сетях, чтобы было больше посетителей на данном сайте. Удачи!

Поставь лайк и поделись с друзьями!