html.mentor(Posts)
155 subscribers
26 photos
2 videos
40 links
Мой дневник, про
вёрстку, технологии, обучение.

Наш основной канал:
https://t.me/html_mentor
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🤩 Перенос текста: можно сделать лучше!

Улучшайте переносы текста с помощью комбинации значений CSS свойства text-wrap.

Больше не будет одиноких слов в конце абзацев, а заголовки будут выглядеть гораздо лучше! 👌

Лови рецепт, красивых переносов:

* {
text-wrap: pretty;
}

h1,h2,h3,h4,h5,h6 {
text-wrap: balance;
}

Поддержка свойств:
text-wrap: pretty - 71.46%
text-wrap: balance - 74.87%


🔗 Can i use. CSS property: text-wrap
🔗 Смотреть ДЕМО на CodePen

Делайте ваш код лучше друзья! ❤️

#css #text
🔥9❤‍🔥1
CSS свойство pointer-events управляет тем, как элементы реагируют на события указателя, такие как клики мыши, или касания.

Чаще всего мы используем два значения, это none (отключаем вовсе), и auto (для отмены первого).

Но что если вам нужно, взаимодействовать с векторной фигурой, с его обводкой, или только заливкой?

На помощь придут значения, которые работают только с SVG.

Pointer-events: stroke и fill

Pointer-events: stroke  

Когда элементу задается значение pointer-events: stroke, это означает, что события указателя будут действовать только на контуры фигуры.

Это используется там где важно, чтобы пользователь мог взаимодействовать только с обводкой объектов.

Pointer-events: fill  

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


🔗 Demo


Делайте ваш код лучше друзья! ❤️

#css #events #svg
👍62
😎Для тех, кто изучает гриды, или хочет подтянуть практические навыки в этом гайде по grid-area приводятся жизненные примеры использования, от Ahmad Shadeed


Рекомендую к изучению

#css
❤‍🔥4
Политика безопасности контента (CSP): что должен знать каждый веб-разработчик.

CSP — это важная концепция, которую нужно знать, понимать и внедрять для защиты ваших пользователей от атак Cross-Site Scripting (XSS). В этой статье рассматривается (почти) все, что вам нужно знать о CSP.

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

👌 Делайте ваш код безопаснее друзья!)


#html #security #web #meta
🔥2
👉 Продолжая тему про неочевидные возможности выравнивания для классического Block Layout:

<style>
.box {
justify-self: center;
}
</style>

<h1 class="box">Hello</h1>


Свойство justify-self: center; под "коробкой" формирует явную ширину блока по его содержимому, и автоматически центрирует по горизонтали, и это без использования flex/grid и дополнительных обёрток/свойств.

Одно свойство, а столько радости 🤓

Поддержка на текущий момент минорная (только в последних версиях Chrome/Edge).


#css #cssFuture #chrome
👍73🔥2
lh — Единица измерения, зависящая от шрифта

Она равна значению свойства line-height, указанному для элемента, или ближайшего родителя.

Пример кода:

<style>
.box {
line-height: 24px;
<!-- задали явное значение 24px -->

width: 2lh; <!-- 2 строки (48px)-->
height: 1lh; <!-- 1 строка (24px) -->

border: 2px solid;
}
</style>

<div class="box"></div>


Благодаря данной зависимости, у нас вырисовываются приятые возможности.

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

Это может быть полезным, когда используются резиновые шрифты, где указывается автоматический, или относительный line-height.

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

Небольшой бонус, в виде root line height единиц — rlh.

Все тоже самое, только наследование происходит от root элемента (html) для которого задан line-height.

lh — классное дополнение, которое может помочь упростить ваш код, избавив от лишних расчётов.

Можно уже смело использовать поддержка 92.47%

Делайте ваш код лучше друзья! ❤️


🔗 can i use
🔗 mdn


#css #units
❤‍🔥4👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Анимируем height: auto👇

Мы знаем, что анимация работает только для интерполируемых (вычисляемых) значений.

Значения типа: auto, ключевые слова min-content/max-content и подобные им, анимировать к сожалению было нельзя.

➡️Вашему вниманию представляю свойство: interpolate-size.

Пример кода:

<style>
:root {
interpolate-size:
allow-keywords;
}

.box {
width: 200px;
height: 2lh;
border: 2px solid;
overflow: hidden;
transition: height .4s;
}

.box:hover {
height: auto;
}
</style>

<div class="box">
Далеко-далеко, за словесными
горами в стране гласных
и согласных живут рыбные тексты.
</div>


Используем значение allow-keywords, которое включает режим интерполяции.

Таким простым образом, буквально в одну строку, мы решили глобальную проблему в web, плавное изменение высоты по размеру её содержимого.

Кто хоть раз пытался сделать анимацию раскрытие списков с динамическим контентом, оценит эту фитчу на 200%.

⚠️ Поддержка набирает обороты, на текущий момент составляет 67.88%


Делайте ваш код лучше, друзья 👨🏻‍💻


🔗 Статья Брамуса с примерами
🔗 MDN

#css #cssFuture
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3👍2🔥1🏆1
Удобный HEX: лаконичное управление alpha-каналом в цветовой схеме.

При создании цветовой схемы часто нужны прозрачные версии цветов.

Вариант 1:
--bg-color: #000;
--bg-alpha-03-color: rgba(0, 0, 0, .3);
--bg-alpha-05-color: rgba(0, 0, 0, .5);
--bg-alpha-08-color: rgba(0, 0, 0, .8);


🔴 Минусы:

1. Использование rgba засоряет код.
2. Нужно создавать кучу переменных, по набору на каждую тему.
3. При смене цвета придется менять все его прозрачные варианты вручную.

🟢 Плюсы?


Вариант 2, с rgb() выглядит лучше:
.block {
--bg-color: 0 0 0;
color: rgb(var(--bg-color) / .3);
}


🔴 Минусы:

1. Дизайнеры в макетах чаще используют HEX.
2. Все цвета придется вручную конвертировать в rgb.
3. Переменная хранит только код цвета без rgb(), что ухудшает работу с переменной.

🟢 Плюсы:

1. Централизованное управление цветом.
2. Меньше кода.


Вариант 3. Используем color-mix():
@function srgb($color, $alpha) {
@return color-mix(in srgb, $color, transparent $alpha);
}

.block {
--block-color: #000;
color: srgb(var(--block-color), 50%);
}


🔴 Минусы?


🟢 Плюсы:

1. Один формат цвета(hex) для всего проекта.
2. Централизованное управление цветом.
3. Упрощает работу с макетом, и поддержку нескольких цветовых схем в проекте.
4. Использует нативную CSS функцию.

❗️Функция SCSS в примере решает проблему удобства, не является обязательной



🙏 Делайте ваш код современней друзья!


🔗 Сolor-mix
🔗 Opacify HEX Color In CSS


#css #colors #theme
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥6
➡️ Алгоритм работы значений max-content, min-content, fit-content

Данные значения относятся к intrinsic sizing (размеры определяются содержимым, а не внешними факторами).



Рассмотрим на примере свойства width:
.box {
width: max-content;
}


📌 Ширина = максимальной ширине содержимого без переносов.

Подходит для кнопок, коротких заголовков, для предотвращения переносов.

Может вызвать overflow (переполнение), если контент превышает ширину родителя.


.box {
width: min-content;
}


📌 Ширина = минимально возможной, с учётом переносов.

Полезно для адаптивных макетов, таблиц, с целью экономии пространства.

Может ухудшать читаемость в многострочном тексте.


.box {
width: fit-content;
}


📌 Гибрид min-content и max-content:

Универсально: для заголовков, кнопок, блоков с динамическим контентом.

Не всегда предсказуемо, лучше тестировать, не использовать в сложных структурах.


fit-content
— лучший выбор для адаптивного дизайна, но max-content и min-content полезны в специфических случаях




❤️ Делайте ваш код предсказуемым друзья!


🔗 Пример кода
🔗 Intrinsic size


#css #intrinsicSizing
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52
CSS Relative Color: теперь в продакшене! 🚀

В мае 2023 поддержка составляла всего 0.15% (только Safari), а уже в феврале 2025 — 90.35% во всех современных браузерах. Пора использовать эту мощную фичу!



📌 Почему это круто?


Гибкость — меняем оттенок, насыщенность, прозрачность прямо в CSS, без JS и препроцессоров.

Адаптивность — легко создаем темные/светлые темы на основе базового цвета.

Меньше кода — работаем с производными цветами, не дублируя значения.


📌 Примеры с HSL:

1. Осветление цвета
.box-1 {
--primary: darkblue;

color: hsl(from var(--primary) h s calc(l + (l * .8)));
}
/* l — lightness для darkblue = 27.25% */

(осветлит --primary на 80% от текущего значения)
Формула: 27.25 + (27.25 * 0.8) = 49.05%


2. Увеличение насыщенности
.box-2 {
--primary: darkblue;

background-color: hsl(from var(--primary) h calc(s + 80) l);
}
/* S — saturation для darkblue = 100% */

(увеличит насыщенность на 80%)
Формула: 100 + 80 = 180%


3. Управление прозрачностью
.box-3 {
--primary: darkblue;

background-color: hsl(from var(--primary) h s l / .8);
}

(сделает цвет прозрачнее на 80% от текущего)


Этот подход может показаться не привычным и сложным.
Но его применение для меня очевидно — эффекты hover, active, focus, disabled на основе всего одного цвета! 🎨


CSS стал еще мощнее. Смело используем друзья! 🔥


🔗Пример кода
🔗 Relative colors
🔗 Про HSL пространство
🔗 Can I use


#css #relativeColors #colors #theme
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Chrome 134/135: Что нового для разработчиков?

1. Кастомизация <select>
Теперь можно полностью переопределять стили <select> через CSS:

select {
appearance: base-select; /* Сбрасывает стандартные стили */
/* Ваши кастомные стили */
}

Это изменение позволяет использовать дополнительные теги внутри <select>помимо <option>, <optgroup>, и <hr>.

Активируется флагом SelectParserRelaxation (до Chrome 141).


2. Управление закрытием <dialog>
Добавлен атрибут closedby для контроля поведения модальных окон:

<dialog closedby="any"> <!-- Закрытие кликом вне окна или Esc -->
<p>Диалог с новыми настройками</p>
</dialog>

closedby="none"
– Отключает закрытие диалоговых окон пользователем.
closedby="closerequest"
– Нажатие Esc (или другой триггер закрытия) закрывает диалоговое окно.
closedby="any"
– Клик за пределами диалогового окна или нажатие Esc закрывает диалоговое окно (похоже на popover="auto" поведение).



3. PWA
Подзаголовок документа (позволяет указать дополнительную информацию о текущем окне)

<meta name="subtitle" content="Новые уведомления">>



4. Якорная навигация
Добавлена функционал хранения информации о сдвиге скролла.
Смещение прокрутки будет учитываться при определении размера элемента. Это означает, что мы можем избежать кейсов, при которых изменение размера будет влиять на смещение прокрутки.



5. CSS-инертность (inert)
Ранее мы использовали HTML атрибут inert.

Такой элемент:
1. Не участвует в событиях мыши/клавиатуры;
2. Игнорируется скринридерами;
3. Не может быть фокусируемым;
4. Не выделяется при поиске (Ctrl+F).

Данный функционал перекочевал и в CSS:
.box {
interactivity: inert; /* Пока работает только в Chrome 135+ */
}



6. Функция shape()
Позволяет создавать отзывчивые фрагменты, используя относительные единицы:

.box {
clip-path: shape(ellipse(50% 50% at 50% 50%));
transition: clip-path .2s;
}

.box:hover {
clip-path: shape(polygon(0 20%, 100% 0, 100% 80%, 0 100%));
}

Эта функция полезна для создания анимации морфинга фигур или обрезки элементов сложной формы.


Выбрал лишь некоторые новости, которые нахожу интересными)



🔗 Chrome 135
🔗 Chrome 134
🔗 Shape()


#css #Chrome #cssFunction
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩4🔥2👍1
html.mentor(Posts) pinned «Chrome 134/135: Что нового для разработчиков? 1. Кастомизация <select> Теперь можно полностью переопределять стили <select> через CSS: select { appearance: base-select; /* Сбрасывает стандартные стили */ /* Ваши кастомные стили */ } Это изменение позволяет…»
This media is not supported in your browser
VIEW IN TELEGRAM
CSS: overflow-anchor – как убрать нежелательные скачки прокрутки

Браузеры стараются сохранять положение просмотра при динамическом изменении контента, но это может вызывать раздражающие "прыжки" страницы. Чтобы избежать таких эффектов, используется overflow-anchor: none.



🔹 Где это полезно?

Чаты и ленты новостей
При добавлении новых сообщений сверху страница может самопроизвольно смещаться.

Динамические виджеты
Автообновляемые блоки (например, биржевые котировки) могут сбивать прокрутку.

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


🔹 Как отключить привязку скролла только для нужных элементов?

.box {
overflow-anchor: none;
}

⚠️ Следует четко понимать, когда нужно использовать, а когда нет.
Данное свойство может негативно повлиять на UX пользователя.



Can I Use: 79.04%
(все браузеры кроме Safari)


Используйте overflow-anchor, чтобы сделать прокрутку более предсказуемой! 🚀

❗️DEMO

🔗 Can i Use
🔗 Overflow-anchor


#css #cssFuture #scroll #overflowAnchor
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
🪄 Easing Wizard — очень красивый, визуальный конструктор easing-функций для создания плавных анимаций.

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


Основные функции:
Редактирование кривых через контрольные точки.
Предпросмотр анимации с выбранной функцией.
Экспорт кода в CSS.
Готовые шаблоны популярных функций (Linear, Elastic, Bounce и др.).
Сравнение нескольких кривых на одном графике.

Преимущества:
🚀 Интуитивный интерфейс без необходимости писать код вручную.
🚀 Оптимизация времени за счет мгновенного обновления превью.
🚀 Гибкость: настройка любых параметров (длительность, задержка, циклы).
🚀 Совместимость (использует нативный CSS).


🧑🏻‍💻 На мой взгляд очень удачный пример, полезного инструмента, с понятной философией: превратить сложные математические расчеты в визуальное творчество.



🔗 ПРОЕКТ : https://easingwizard.com


#инструмент #анимации #webanimation #cssanimation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
🔥 CSS-mixins стали доступны под флагом в chrome сanary!

Миксины — эффективный способ манипулировать повторяющимися фрагментами кода.


Постепенно препроцессорный функционал перекочёвывает в коробку в CSS:

Было:
@mixin box {
aspect-ratio: 1;
inline-size: 100px;
block-size: 100px;
}

.box {
@include box;
}


Стало:
@mixin --box {
aspect-ratio: 1;
inline-size: 100px;
block-size: 100px;
}

.box {
@apply --box;
}


CSS становится все мощнее и сложнее.

Он берёт лучшее из препроцессоров, и это отличная тенденция!


⚠️ К слову, CSS-функции, также доступны под флагом!
С их возможностями можете ознакомится в статье Брамуса


🔗 CSS-mixins (черновики)
🔗 CSS Mixins are ready for experimentation!


#cssfuture #css #cssmixin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4😎1
Разбираемся с тонкостями flex-wrap 👇

1️⃣ flex-wrap: wrap
Включает многострочный режим, даже если строка одна. Это нужно для работы свойства align-content.

2️⃣ align-items vs align-content:

🔹 align-items — выравнивает элементы внутри строки;
🔹 align-content — выравнивает все строки (работает только с wrap).

❗️Важно:
Без flex-wrap: wrapalign-content не работает.
Контейнер считается однострочным.

💡 При фиксированной высоте flex-контейнера:

— Без wrap: align-items: stretch растянет элементы на всю высоту.

— С wrap: строки можно выравнивать, а элементы растянутся только до высоты самой строки (по самому высокому элементу в строке).

Простыми словами, можно комбинировать свойства, зная этот нюанс в поведении flex-wrap, для корректного и универсального выравнивания.


🔗 Смотреть ДЕМО
🔗 The unknown behavior of flex-wrap


#css #flex #flexWrap
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
CSS if() — кратко и понятно

if() — экспериментальная CSS-функция для условного задания значений свойств, аналог if…else в JS.



Синтаксис:
if(<условие>: <значение>; [else: <значение>;])



Условия:

🔹 media(...) — медиазапрос ;

🔹 supports(...) — проверка поддержки свойства ;

🔹 style(--var: value) — проверка CSS-переменной;

else — опционально срабатывает, если предыдущее условие ложно.



Медиазапрос:
background-color: if(media(print): white; else: #eee;)


Проверка поддержки свойства:
color: if(supports(color: lch(75% 0 0)): lch(75% 0 0); else: rgb(185 185 185);)


CSS-переменные:
padding: if(style(--size: "2xl"): 1em; else: 0.25em;)



❗️Важно:

🔹 Экспериментальная поддержка: не во всех браузерах.

🔹 Без else при ложном условии возвращает недопустимое значение.

🔹 Отлично для динамических и гибких интерфейсов.


Вывод:
if() упрощает условное оформление стилей, но использовать нужно осторожно из-за ограниченной поддержки.


🔗 Смотреть на developer.mozilla.org
🔗 Can I USE 63.76%


#css #cssFuture
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Функции CSS.
То что раньше делали только через JS


1️⃣ sibling-count()


Возвращает количество элементов среди соседей (вместе с самим элементом).

📌 Можно задать динамическую ширину:

li {
width: calc(100% / sibling-count());
}


2️⃣ sibling-index()

Возвращает порядковый номер элемента среди соседей.

📌 Удобно для анимаций, или последовательного оформления:

li {
animation-delay: calc(.1s * sibling-index());
}


💡 Раньше такие вещи делали через JS (перебором children, и добавлением inline-стилей).

Теперь всё можно решить одним CSS



⚠️ Поддержка CAN I USE: 65.72%



🔗 sibling-count()
🔗 sibling-index()


#css #cssFuture #frontend #webdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7🤔1