Каморка Геткурсовода 💻 | Канал Максима Елисеева
2.25K subscribers
189 photos
18 videos
9 files
104 links
Остались вопросы? Пишите — @Isagaya

Этот уютный канал посвещён фишкам и нестандартным решениям по дизайнам, интерфейсам и функционалам платформы от Куратора школы Магии Геткурса — Максима Елисеева.

Мой второй канал обо всём - https://t.me/closetmax ;)
Download Telegram
Многим был интересен механизм работы "Читать далее". В этом посте я раскрою одну из его механик работы. Экспериментировать я буду на своём любимом блоке "Карточек".

Если вы хотите разметить много текста в описании вашего продукта в карточке, то логичнее не делать "портянку", а придерживаться единого ритма текстового контента, например, показывать лишь 3 строчки текста, чтобы всё остальное было скрыто. Но как так сделать? 🧐

Демонстрирую один из возможных вариантов:
1) Ставим блок карточек (см. скриншот)
2) Делаем описание карточки с подобной внутренней разметкой:

<p>... Очень много вашего текста...</p>
<p class="readmore"><a style="font-weight: bold;">Читать далее...</a></p>

3) Вставляем стили в Стили блока в "Подробные настройки":

.lt-tsr-content .description p {
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}

.lt-tsr-content .description p.opened {
-webkit-line-clamp: initial;
}

.lt-tsr-content .description p.changed a {
font-size: 0;
}

.lt-tsr-content .description p.changed a:before {
content: 'Скрыть';
font-size: 16px;
}

4) В самом низу страницы или под блок с карточками ставим блок с JS-кодом:

$(function() {
let readBtns = document.querySelectorAll('.readmore');

readBtns.forEach(el => {
el.addEventListener('click', function() {
this.classList.toggle('changed');
this.previousElementSibling.classList.toggle('opened');
})
})
})

И наслаждаемся чудесным механизмом "Читать далее", который безумно сильно сокращает полотна текста на карточках, а так же делает эстетически приятный однородный вид элементов 😉

#полезная_фишка #лёгкая_кастомизация
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите чтобы в вашем проекте регистрировались только с почты определённого домена? Можно устроить!

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

Делюсь пошаговым планом эвакуации 😱 действий:
1) Вам нужно поставить обычную форму на страницу (поле имейла должно быть не скрыто)
2) Поставить CSS-класс блоку с формой form в "Стилях" блока
3) В самый верх страницы поставить следующий CSS в отдельный блок "CSS-код":

.form [data-item-name="emailField"] {
position: relative;
}

.form [data-item-name="emailField"] .field-content:before {
content: '';
position: absolute;
width: 10px;
height: 10px;
background: #333;
border-radius: 50%;
right: 20px;
top: 50%;
transform: translateY(-50%);
}

.form [data-item-name="emailField"].valid .field-content:before {
background: #0f0;
box-shadow: 0 0 5px #0f0,
0 0 10px #0f0,
0 0 20px #0f0;
}

.form [data-item-name="emailField"].invalid .field-content:before {
background: #f00;
box-shadow: 0 0 5px #f00,
0 0 10px #f00,
0 0 20px #f00;
}

4) Поставить JS-код в отдельный блок в самый низ страницы, либо под самой формой:

$(function() {
function validate() {
let emailInput = document.querySelector('.form [data-item-name="emailField"]');
let innerInput = document.querySelector('.form [data-item-name="emailField"] input').value;
let formButton = document.querySelector('.form button');
const pattern = /@gmail.com|@yandex.ru/;

if (innerInput.match(pattern)) {
emailInput.classList.add('valid');
emailInput.classList.remove('invalid');
formButton.disabled = false;
} else {
emailInput.classList.add('invalid');
emailInput.classList.remove('valid');
formButton.disabled = true;
}

if (innerInput == "") {
emailInput.classList.remove('valid');
emailInput.classList.remove('invalid');
formButton.disabled = true;
}
};

$('.form [data-item-name="emailField"] input').on('keyup',function() {
validate();
});

validate();
})

В данный момент скрипт настроен таким образом, что будет считать валидным строку имейла, если в ней присутствует @gmail.com или @yandex.ru. Эта настройка хранится в переменной pattern, вы не пропустите отдельное выделение данного паттерна в скрипте, когда будете ставить его на Геткурс. Вы можете изменить этот паттерн, например, вы хотите добавить так же @mail.ru, то паттерн будет выглядеть уже вот так /@gmail.com|@yandex.ru|@mail.ru/

Обратите внимание, все новые значения доменов перечисляйте через знак прямого слэша ( | ).

#полезная_фишка
Выходные, время работы над своими ошибками и переосмыслению ситуаций. Вот и я на выходных нашел для вас полезный сервис, который помогает выявлять ошибки в CSS-коде онлайн, если вы не понимаете, где у вас затык, и пересмотрели глазами всё вдоль и поперёк 😂

CSS Lint поможет вам найти ошибки в вашем CSS-коде (а так же травмирует ваши чувства, как утверждает сам сервис 😄), и покажет, что и где было не так. На скриншоте я привёл пример своего кривого CSS, и линтер вывел все имеющиеся ошибки в таблицу, так же подсветив строки, в которых нашел проблему. Где-то не закрыты скобки, о чём он тоже сообщает и ругается, а так же неправильное написание некоторых свойств и их значений.

Будет полезно для тех, кому не хочется ставить сторонние специализированные программы по редактору кода 😎

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Ломаем систему одноблочности 😁

Речь пойдет про достаточно популярный блок "Обложка", которым пользуются чуть ли не 99% всех проектов уж точно. И зачастую жалуются на то, что его не особо можно разнообразить, например добавить свою колоночную систему нам этот блок не позволяет.

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

Дело в том, что зачастую в этом блоке используются в основном 2 типа элементов: текстовый и картинка. Поэтому будем опираться на них. Они имеют свои достаточно похожие классы, начинающиеся с part:

.part-text — текстовый элемент
.part-image — изображение

Прибегая к нехитрой манипуляции и математике, можем уменьшить их ширину в процентах оставляя им некую погрешность в расстоянии между друг-другом.

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

.part-text {
display: inline-block;
max-width: calc(50% - 10px);
vertical-align: middle;
}

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

.part-text, .part-image {
display: inline-block;
max-width: calc(33% - 10px);
vertical-align: middle;
}

Функция calc() будет постоянно пересчитывать эти значения при каждом уменьшении экрана, а значит проблем с адаптивностью данных колонок будет минимум 😉

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

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ух, работа и сторонние проекты поглотили меня. Но вот возвращаюсь к ведению своего канала. И у меня есть для вас один очень интересный инструмент, который лежит на просторах интернета, и делает очень красивые переходы между блоками 😎

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

Заходите, генерируйте, и пользуйтесь! Всё достаточно просто. Как только выберите цвет и сгенерируете привлекательную для вас волну, нажимаете кнопку по центру, и вам выдаётся свг, который нужно поставить в HTML-блок в Геткурсе. Советую делать такие вставки между блоками поставив HTML-блок. Если захотите по каким-то причинам использовать внутри блока в html-элементе, то вам придётся повозиться с тем, чтобы отменить некоторые позиционирования у родительских элементов 😂

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Как в книгах! 🤓

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

За определение первой буквы в тексте отвечает псевдокласс ::first-letter. Таким образом мы выберем первую букву, но что же делать дальше?

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

В моём примере я поставил на текстовый блок класс article и обращаясь к элементу p я выбираю его первую букву, а затем применяю следующие правила:

.article p::first-letter {
color:#FE5F55;
font-weight: bold;
font-size: 70px;
float: left;
line-height: 60px;
padding-right: 8px;
margin-top: -3px;
}


И благодаря этому получается такой красивый эффект "Буквицы" с обтеканием текста вокруг. Можно так же навесить на эту первую букву другой, более "сказочный" шрифт. Далее фантазия зависит только от вас ☺️

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Выходим за пределы сознания формы кнопки 👀

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

Рецепт такой кнопки прост:
1) Возьмите блок с кнопкой или любую кнопку (шок-контент 😮 )
2) Вставьте в стили блока в "Подробные настройки" следующие стили:

.btn {
text-transform: uppercase;
font-weight: 500;
letter-spacing: 2px;
transition: 0.5s;
clip-path: polygon(100% 0, 100% 50%, 100% 100%, 0% 100%, 0 50%, 0% 0%);
}

.btn:hover {
letter-spacing: 4px;
font-weight: 800;
clip-path: polygon(90% 0, 100% 50%, 90% 100%, 0% 100%, 10% 50%, 0 0);
}


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

И да, конечно же всех с пятницей! 😎

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вы думаете, из какого блока был свёрстан этот блок на скриншоте №1? 🧐

На размышление 30 секунд 😂

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

На самом деле здесь используется блок "Две колонки с произвольным контентом". Всё, что нужно сделать это поставить блок желаемой картинки и блок текста друг за другом (скриншот №2). А затем применить чуть-чуть магии называемой CSS 😎

После того как мы поставили блоки так, как показано на скриншоте, нам нужно поставить следующие стили в блок:

.flex-container .flex-column {
align-items: center;
}

.part-image,
.part-text {
max-width: calc(50% - 20px);
}

.part-text {
padding-left: 30px;
}


Так мало стилей? Да! Мы всего лишь поменяли структуру ширины блоков изображения и текста, в следствии чего они встали в один ряд друг с другом, а так же зацентрировали их относительно друг-друга. Ну а дальнейшая стилизация уже зависит от вашей фантазии, дерзайте 😉

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Возвращаемся после праздников в работу 😉

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

На скриншоте я показываю как можно разнообразить блок с картинкой, придав ему декоративную рамку, из которой изображение как бы "вылетело", что придаёт некий шарм самому блоку 😊

Зачастую класс блока с картинкой называется part-image, от него и будем отталкиваться. Саму картинку мы оставим не тронутой, а вот заднюю рамку со смещением повесим на псевдоэлемент. Получится примерно следующее:

.part-image {
position: relative;
z-index: 5;
}

.part-image:before {
content: '';
position: absolute;
z-index: -1;
display: block;
width: 100%;
height: 100%;
border: 10px solid #FFCA42;
transform: scale(0.95) translate(30px, 40px);
}


Как итог, мы чуть-чуть поигрались со слоями, а рамку отправили позади самого элемента задав ему z-index: -1. Приукрасили стилями как надо и сместили и чуть сузили с помощью свойства transform. Пользуйтесь

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Прилипающий контент. Смотрится отлично, практичен и дружелюбен в плане UX. К тому же и делается достаточно просто.

Нужно прописать контейнеру буквально одно свойство:

position: sticky;


Но использовать его нужно грамотно и правильно. Потому что почти никто не понимает почему блок не прилипает и не ездит в след за прокруткой страницы.

Во-первых, обязательно должна присутствовать координата отступа, например top: 10px. Она будет означать что контент прилипнет при прокрутке сверху и будет отступать от края окна браузера 10px. Итого у плавающего контейнера свойства будут выглядеть примерно так:

position: sticky;
top: 10px;


И второй важный момент я покажу на скриншоте к посту. У блока родителя, который содержит контейнер со свойством position: sticky должно хватать высоты, по которой как раз будет ездить внутренний блок как лифт. Лучше всего чтобы это было автоматическое расстояние основанное на растянутости вашего контента. Ну или же до определённого момента — решать вам 😉

P.S. Скрин и гифка чуть ниже)

#лайфхак #полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Тема кнопок всегда будет актуальна, ведь как-то надо привлекать внимание пользователей, верно? 😌

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

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

.btn {
background: radial-gradient(53.6% 103.93% at 28.4% 50.81%, #d58ecf 0%, #bb4056 100%);
border-radius: 10px;
font-size: 20px;
letter-spacing: -0.02em;
text-transform: uppercase;
padding-left: 45px;
padding-right: 45px;
}


В то же время важно в настройках кнопки оставить поля цветов пустыми (скриншот №2), и применить настройки. Тогда данный CSS вполне хорошо ляжет на саму кнопку. Вы можете поиграться и поставить свои цвета, которые являются главными у вас в проекте 😊

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Существует такая проблема как "слишком много полей в форме регистрации". Да, я и сам с такой сталкивался, и зачастую превращали страницу, как я люблю называть, в рулон туалетной бумаги 😦

Подготовил для вас небольшой лайфхак с тем, как я решал эту проблему. Достаточно простенько, но элегантно 😉

В CSS стили блока с формой ставим:

.form-content .builder {
display: flex;
flex-wrap: wrap;
gap: 10px;
}

.part-userField {
flex: 1 0 49%;
}

.part-header, .part-button {
flex-basis: 100%;
}


И вуаля, наши поля теперь расположены в 2 ряда. Если у вас нечётное количество полей, то может быть такое, что у вас останется лишнее некрасивое место. Чтобы решить эту проблему так же элегантно, то назовите поле вашим собственным классом, и добавьте ваш класс в последнее правило, где применяется свойство flex-basis: 100%;

Должно выглядеть так:

.part-header, .part-button, .вашкласс {
flex-basis: 100%;
}


#лайфхак #полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня решил поделиться с вами сочным дизайном корзины на ГК, чтобы как-то разнообразить её скучный вид 😉

Есть несколько состояний корзины: закрытая и раскрытая.

Для владеющих CSS людей я отделил комментариями в стилях части стилей, которые отвечают за разные состояния, можете попробовать подредактировать некоторые моменты под ваш проект 😏

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

Сами стили будут ниже этого поста. Так как они не вмещаются в него 😆

#полезная_фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM