This media is not supported in your browser
VIEW IN TELEGRAM
"Липкая" шапка таблицы с position: sticky
Бывает таблица длинная, ты ее скроллишь, читаешь, а потом опа.. и забыл, что вообще находится в столбце №4 и приходится скроллить обратно наверх, запоминать и снова возвращаться вниз. Немного напрягает)
Чтобы пофиксить этот момент, в таблице можно сделать шапку, которая всегда будет на виду во время скролла.
Делается это с помощью всем нам знакомого свойства
Чтобы все было ок, достаточно этого:
Теперь при прокрутке шапка остаётся на месте, а данные под ней скрываются.
Также стоить помнить, что если у родителя нет overflow, то "липкость" не сработает.
Ну, а полный код можно пощупать здесь.
Бывает таблица длинная, ты ее скроллишь, читаешь, а потом опа.. и забыл, что вообще находится в столбце №4 и приходится скроллить обратно наверх, запоминать и снова возвращаться вниз. Немного напрягает)
Чтобы пофиксить этот момент, в таблице можно сделать шапку, которая всегда будет на виду во время скролла.
Делается это с помощью всем нам знакомого свойства
position: sticky
.position: sticky
— это своего рода гибрид между relative
и fixed
. Элемент ведет себя как position: relative
, пока не достигнет определенного порога при скролле, а затем превращается в position: fixed.Чтобы все было ок, достаточно этого:
th {
position: sticky;
top: 0;
background-color: #fff; /* Чтобы не просвечивало содержимое */
}
Теперь при прокрутке шапка остаётся на месте, а данные под ней скрываются.
Также стоить помнить, что если у родителя нет overflow, то "липкость" не сработает.
Ну, а полный код можно пощупать здесь.
👍30🔥6❤3
Круглые аватарки с object-fit: cover
Разбираем, как сделать аватарки, которые выглядят, как из модного приложения, а не как из профиля на форуме 2000 года)
Возьмём одну и ту же фотку и применим два подхода: ленивый (
Ленивый подход с border-radius: 50%
Берём фотку и просто делаем её круглой:
Никакой умной обрезки: изображение просто втискивается в круг — пропорции вышли из чата)
Правильный подход с object-fit: cover
Оборачиваем фотку в контейнер и используем
Фотка масштабируется, чтобы заполнить контейнер, но сохраняет пропорции.
Глянуть код можно здесь.
Разбираем, как сделать аватарки, которые выглядят, как из модного приложения, а не как из профиля на форуме 2000 года)
Возьмём одну и ту же фотку и применим два подхода: ленивый (
border-radius: 50%
) и правильный (object-fit: cover
).Ленивый подход с border-radius: 50%
Берём фотку и просто делаем её круглой:
<img class="lazy-avatar" src="image.jpg" alt="Аватар">
.lazy-avatar {
width: 300px;
height: 300px;
border-radius: 50%;
}
Никакой умной обрезки: изображение просто втискивается в круг — пропорции вышли из чата)
Правильный подход с object-fit: cover
Оборачиваем фотку в контейнер и используем
object-fit: cover
:<div class="avatar">
<img src="image.jpg" alt="Аватар">
</div>
.avatar {
width: 100px;
height: 100px;
border-radius: 50%;
overflow: hidden;
}
.avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
Фотка масштабируется, чтобы заполнить контейнер, но сохраняет пропорции.
Глянуть код можно здесь.
👍19🔥12😁3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
"Липкая" шапка таблицы с position: sticky v2
Давайте сегодня еще добавим пару фич в нашу таблицу из этого поста. Разберем, как сделать выделение строк, которые находятся под курсором и как добавить эффект зебра-стайл)
Итак, чтобы сделать полосатые строки таблицы, можно с помощью псевдокласса
А чтобы выделить строки под курсором используем псевдокласс
Добавили буквально по паре строк и таблица стала не только функциональна, но и эстетически красива)
Кстати, наш подписчик Alexey в прошлом посте годно подметил, что можно использовать для липкой шапки не th, а thead, здесь переделывать не стал, просто имейте в виду)
Код всей таблицы можно глянуть здесь.
Давайте сегодня еще добавим пару фич в нашу таблицу из этого поста. Разберем, как сделать выделение строк, которые находятся под курсором и как добавить эффект зебра-стайл)
Итак, чтобы сделать полосатые строки таблицы, можно с помощью псевдокласса
:nth-child
выбрать четные строки и поменять им цвет:tr:nth-child(even) {
background-color: #e0e0e0;
}
А чтобы выделить строки под курсором используем псевдокласс
:hover
:tr:hover {
background-color: #f1f9ff;
}
Добавили буквально по паре строк и таблица стала не только функциональна, но и эстетически красива)
Кстати, наш подписчик Alexey в прошлом посте годно подметил, что можно использовать для липкой шапки не th, а thead, здесь переделывать не стал, просто имейте в виду)
Код всей таблицы можно глянуть здесь.
👍21🔥10
Фигурные обтекания с shape-outside
Частенько, особенно при верстке лендингов, приходится делать фигурное обтекание картинок текстом.
Свойство
Чтобы все обтекало, как надо, достаточно задать блоку
■
■
■
■
Пример с кругом:
Конечно, многие давно уже юзают это свойство, но новичкам будет полезно)
Пример кода, как всегда здесь.
Частенько, особенно при верстке лендингов, приходится делать фигурное обтекание картинок текстом.
Свойство
shape-outside
, как раз на этом специализируется. Оно позволяет задать форму, вокруг которой будет обтекать текст и не просто прямоугольник, а круг, треугольник или даже сложную SVG-фигуру.Чтобы все обтекало, как надо, достаточно задать блоку
float
и shape-outside
. Форму можно определить через:■
circle()
■
ellipse()
■
polygon()
■
url()
если форма задана в SVGПример с кругом:
.shape {
float: left;
shape-outside: circle(50%);
width: 200px;
height: 200px;
background: #3498db;
border-radius: 50%;
}
Конечно, многие давно уже юзают это свойство, но новичкам будет полезно)
Пример кода, как всегда здесь.
👍25🔥8❤3
Нарезаем изображения
Сегодня давайте бегло пробежимся по CSS-свойству, благодаря которому мы можем делать изображения таких форм, которые нафантазировали в своих головах дизайнеры)
Это свойство
Основные формы:
1. Круг:
50% — радиус круга, at center — положение центра.
2. Эллипс:
25% — горизонтальный радиус, 40% — вертикальный радиус, at 50% 50% — центр эллипса.
3. Многоугольник:
Каждая пара значений — это координаты точки в формате
Это самые простые примеры, можно создавать любые фигуры, а также использовать svg, в качестве маски.
Пример код можно глянуть здесь.
Сегодня давайте бегло пробежимся по CSS-свойству, благодаря которому мы можем делать изображения таких форм, которые нафантазировали в своих головах дизайнеры)
Это свойство
clip-path
, которое позволяет обрезать изображение по заданной форме.Основные формы:
1. Круг:
.circle {
clip-path: circle(50% at center);
}
50% — радиус круга, at center — положение центра.
2. Эллипс:
.ellipse {
clip-path: ellipse(25% 40% at 50% 50%);
}
25% — горизонтальный радиус, 40% — вертикальный радиус, at 50% 50% — центр эллипса.
3. Многоугольник:
.rhombus {
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
}
Каждая пара значений — это координаты точки в формате
X% Y%
. Точки соединяются в указанном порядке.Это самые простые примеры, можно создавать любые фигуры, а также использовать svg, в качестве маски.
Пример код можно глянуть здесь.
🔥19👍11✍2❤1
clip-path для блоков
Кстати, свойство
С помощью этого свойства можно стилизовать в целом любые блоки, к примеру, на лендингах можно выделять различные смысловые секции.
Так можно запилить скошенный блок для первой секции, как на картинке в превью поста:
Здесь можно глянуть на импровизированный лендинг из 3х секций)
Кстати, свойство
clip-path
можно юзать не только, для обрезки изображений. С помощью этого свойства можно стилизовать в целом любые блоки, к примеру, на лендингах можно выделять различные смысловые секции.
Так можно запилить скошенный блок для первой секции, как на картинке в превью поста:
.hero {
min-height: 50vh;
background: #4a6bff;
color: white;
display: flex;
flex-direction: column;
justify-content: center;
clip-path: polygon(0 0, 100% 0, 100% 80%, 0 100%);
}
Здесь можно глянуть на импровизированный лендинг из 3х секций)
👍22🔥7❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Адаптивные колонки
Если вам вдруг позарез необходимо сверстать адаптивные текстовые колонки, то можно обойтись без флексов и гридов, использовав
Вы получаете сбалансированный многоколоночный макет, где:
-
-
Кстати, это можно использовать не только для текста, но и для списков, например, в футере, где обычно располагается по 50 ссылок)
Потестить код можно здесь.
Если вам вдруг позарез необходимо сверстать адаптивные текстовые колонки, то можно обойтись без флексов и гридов, использовав
columns
, все делается буквально одной строчкой:.container {
columns: auto 20rem;
}
Вы получаете сбалансированный многоколоночный макет, где:
-
auto
— означает автоматическое определение количества колонок.-
20rem
— минимальная ширина каждой колонки.Кстати, это можно использовать не только для текста, но и для списков, например, в футере, где обычно располагается по 50 ссылок)
Потестить код можно здесь.
👍25🔥15❤2
CSS Nesting
Кто не знал, в нативном CSS уже есть такая штука, как nesting(вложенность). Вещь удобная, но в целом не новая, если вы раньше работали с SASS, LESS и.т.д.
Так вот, теперь CSS начал это уметь "из коробки".
Пример простой разметки:
CSS Nesting:
То же самое, на стандартном CSS:
Здесь приготовил для вас более продвинутый пример со сравнением разных подходов.
Кто не знал, в нативном CSS уже есть такая штука, как nesting(вложенность). Вещь удобная, но в целом не новая, если вы раньше работали с SASS, LESS и.т.д.
Так вот, теперь CSS начал это уметь "из коробки".
Пример простой разметки:
<div class="card">
<h2 class="title">Карточка</h2>
<button class="button">Кнопка</button>
</div>
CSS Nesting:
.card {
background: #f5f5f5;
padding: 16px;
.title {
font-size: 20px;
}
.button {
background: #007bff;
color: #fff;
padding: 8px;
&:hover {
background: #0056b3;
}
}
}
То же самое, на стандартном CSS:
.card {
background: #f5f5f5;
padding: 16px;
}
.card .title {
font-size: 20px;
}
.card .button {
background: #007bff;
color: #fff;
padding: 8px;
}
.card .button:hover {
background: #0056b3;
}
Здесь приготовил для вас более продвинутый пример со сравнением разных подходов.
🔥32👍15❤1👌1🤝1
Текстовый фрагмент
Недавно узнал про еще одну интересную фишку, под названием "ссылка на текстовый фрагмент". Т.е. мы можем напрямую ссылаться на определенную часть текста, не используя при этом идентификатор и т.п.
Делается это с помощью
Реализуется таким образом:
После перехода по этой ссылке, браузер проскроллит до первого совпадения с указанным в ссылке текстом и подсветит его.
А для стилизования этого выделения можно использовать псевдокласс
Кстати, еще один способ использования:
нашли вы интересную статью и хотите поделиться с кентом определенной инфой из статьи, чтобы не объяснять "читай с 7 абзаца, после третьей картинки", вы можете сделать так: https://www.w3.org/standards/#:~:text=W3C%20publishes%20recommendations
Ну и как обычно, код можно посмотреть здесь.
Недавно узнал про еще одну интересную фишку, под названием "ссылка на текстовый фрагмент". Т.е. мы можем напрямую ссылаться на определенную часть текста, не используя при этом идентификатор и т.п.
Делается это с помощью
#:~:text=
в ссылке.Реализуется таким образом:
<a href="#:~:text=фрагмент">ссылка на фрагмент</a>
После перехода по этой ссылке, браузер проскроллит до первого совпадения с указанным в ссылке текстом и подсветит его.
А для стилизования этого выделения можно использовать псевдокласс
::target-text
:::target-text {
background: black;
color: white;
}
Кстати, еще один способ использования:
нашли вы интересную статью и хотите поделиться с кентом определенной инфой из статьи, чтобы не объяснять "читай с 7 абзаца, после третьей картинки", вы можете сделать так: https://www.w3.org/standards/#:~:text=W3C%20publishes%20recommendations
Ну и как обычно, код можно посмотреть здесь.
🔥48👍18❤2
Меняем кнопку Enter виртуальной клавиатуры
Разберем интересный и простой трюк, который сделает наши формы, на мобильных устройствах, умнее — атрибут
Он позволяет менять надпись на клавише Enter в зависимости от того, что делает пользователь — ищет информацию, отправляет сообщение или переходит к следующему полю.
Браузеры моб. устройств отображают эту кнопку по-разному, в зависимости от значения атрибута.
Добавляем атрибут к
После этого кнопка Enter в моб. браузере будет называться "Отправить".
Доступные значения:
■
■
■
■
■
■
Пример можно глянуть здесь.
Разберем интересный и простой трюк, который сделает наши формы, на мобильных устройствах, умнее — атрибут
enterkeyhint
. Он позволяет менять надпись на клавише Enter в зависимости от того, что делает пользователь — ищет информацию, отправляет сообщение или переходит к следующему полю.
Браузеры моб. устройств отображают эту кнопку по-разному, в зависимости от значения атрибута.
Добавляем атрибут к
<input>
или <textarea>
:<input type="text" id="message" placeholder="Введите сообщение..." enterkeyhint="send">
После этого кнопка Enter в моб. браузере будет называться "Отправить".
Доступные значения:
■
enter
— стандартная кнопка (по умолчанию)■
done
— «Готово»■
go
— «Перейти» ■
next
— «Далее»■
search
— «Найти»■
send
— «Отправить»Пример можно глянуть здесь.
👍40🔥13✍4❤2😎1
This media is not supported in your browser
VIEW IN TELEGRAM
Отступы для прокрутки — scroll-padding
Было у вас такое, что вы сделали якорную ссылку для скролла к элементу, все было классно, но потом узнали, что хедер должен быть фиксированным?
Зафиксировали хедер, теперь скролл доходит до элемента, но половина контента скрыта под этим хедером, который никому не нужен, но "по дизайну так надо")
Раньше мы решали это костыльными способами:
■ Добавляли невидимый
■ Писали JavaScript для подсчета высоты хедера.
Но теперь все проще, есть
И всё. Теперь браузер сам знает, что нужно оставить место сверху. Без костылей и расчетов)
Демку потестить можно здесь.
Было у вас такое, что вы сделали якорную ссылку для скролла к элементу, все было классно, но потом узнали, что хедер должен быть фиксированным?
Зафиксировали хедер, теперь скролл доходит до элемента, но половина контента скрыта под этим хедером, который никому не нужен, но "по дизайну так надо")
Раньше мы решали это костыльными способами:
■ Добавляли невидимый
div
перед нужным элементом.■ Писали JavaScript для подсчета высоты хедера.
Но теперь все проще, есть
scroll-padding-top
, который решает проблему в одну строчку:html {
scroll-padding-top: 80px; /* Высота хедера */
}
И всё. Теперь браузер сам знает, что нужно оставить место сверху. Без костылей и расчетов)
Демку потестить можно здесь.
👍37🔥17✍6❤3
Горячие клавиши в VS Code
Принес еще немного годноты для ускорения верстки)
Вроде бы очевидные вещи, которые реально помогают, но многие про них не знают или забывают, так что если что, то теперь знайте или не забывайте)
Ну, а здесь можно найти официальные PDF с хоткеями для каждой ОС в VS Code:
■ Windows
■ macOS
■ Linux
Принес еще немного годноты для ускорения верстки)
Вроде бы очевидные вещи, которые реально помогают, но многие про них не знают или забывают, так что если что, то теперь знайте или не забывайте)
Ну, а здесь можно найти официальные PDF с хоткеями для каждой ОС в VS Code:
■ Windows
■ macOS
■ Linux
🔥21👍7✍3❤1
100vh vs 100dvh
Вы задали блоку высоту
Разберемся почему это происходит и как это пофиксить.
Когда мы используем
Результат: часть содержимого может быть "съедена" панелью навигации браузера и появляется лишний скролл.
Для решения этой проблемы существует единица измерения
Поддерживается в большинстве современных браузеров, но если хотите подстраховаться, то можно сделать так:
Демку кода делать не стал, результат можно глянуть на видосах к этому посту)
Вы задали блоку высоту
100vh
, чтобы он занимал весь экран, но на мобильном устройстве появился скролл. Бывало такое?)Разберемся почему это происходит и как это пофиксить.
Когда мы используем
100vh
— моб. браузеры интерпретируют это, как 100% от максимальной высоты экрана, а не фактической видимой области.Результат: часть содержимого может быть "съедена" панелью навигации браузера и появляется лишний скролл.
Для решения этой проблемы существует единица измерения
dvh
(dynamic viewport height), которая учитывает фактическую доступную высоту экрана, исключая адресную строку и навигационную панель браузера на мобильных устройствах.Поддерживается в большинстве современных браузеров, но если хотите подстраховаться, то можно сделать так:
.full-height {
height: 100vh; /* Fallback для старых браузеров */
height: 100dvh; /* Для современных браузеров */
}
Демку кода делать не стал, результат можно глянуть на видосах к этому посту)
👍42🔥15❤4🤝2✍1