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

Наш основной канал:
https://t.me/html_mentor
Download Telegram
👉🏻 Внешние ссылки. Оформи безопасно!

❗️Внешняя ссылка
- ссылка, которая перенаправляет на другой сайт.


Задача:

Сделать максимально удобной, и безопасной навигацию для пользователя.


Решение:

1. Используем атрибут target со значением _blank, открываем сайт в новой вкладке, сохранив старую, пользователь сможет на неё вернуться.

2. Прописываем атрибут rel со значениями noreferrer noopener, последнее значение повышает безопасность (не передает объект window).

Cвойство объекта window opener - позволяет получить в текущем окне, ссылку на окно, с которого было открыто данное окно.

Это помогает предотвратить некоторые виды атак.

Пример правильного оформления ссылки:

<a
target="_blank"
rel="noreferrer noopener"
href="https://gkarev.github.io/html_mentor"
</a>


Выводы:

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

Но также, увеличили баллы в lighthouse, и практически пассивно, улучшили СЕО.

Учим HTML, используем атрибуты правильно!



#html #attribute
7👍1🔥1
👌🏻 Новые значения CSS Media Query

Adam Argyle - инженер по связям с разработчиками, работающий над Chrome CSS, UI и DevTools, опубликовал пост, где рассказал, о новых значения для Media Query.

Если коротко, то теперь нам доступна выборка устройства пользователя, на основе скорости обновления его монитора/экрана.

Нам на выбор предоставили три варианта:

@media (update: fast) {
/* экраны с высокой герцовкой*/
}

@media (update: slow){
/* экраны с низкой герцовкой, например электронные книги */
}

@media (update: none){
/* интерфейс однократного вывода изображения(при печати) */
}

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

Первое что приходит в голову, это применение на страницах с большим количеством анимации, где нагрузка на ЦП/GPU выше среднего.


Полезные ссылки:

🔗 Сама статья
🔗 Офф. спека



#css #cssFuture
🔥6👍3
😎 CSS Relative colors (относительные цвета в CSS).

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

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

:root {
--color: 0 0 0;
}

.el {
background-color:
rgb(var(--color) / .4);
}

⚠️ Но к сожалению данный подход имеет ограничение.

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

А мы, как правило, работаем в основном с HEX.

Проблема. Необходим универсальный инструмент, который будет подходить для всех форматов цвета.

Решение:

:root {
--color: red;
}

.el {
background-color:
rgb(from var(--color) r g b / .4);
}

👌🏻 Данная запись конвертирует цвет в rgb, и задаёт для неё прозрачность!


Вывод:
Таким образом мы освобождены от необходимости определенному формату при формировании цветовой схемы проекта!

Поддержка 0.15%. Только в Safari 😢


Полезные ссылки:

🔗 css color 5
🔗can i use


#css #cssFuture #colors
🔥7🫡1
🫵🏻 Логотип. Как правильно сверстать?

Лого - часть брендового стиля, это то что позволяет идентифицировать компанию/продукт, среди других конкурентов.

Важная часть, не так ли?

Думаю он должен отвечать некоторым стандартам качества:

1. Корректно выглядеть без CSS.
2. Адекватно отображаться при печати.
3. Быть доступен для поисковой индексации.
4. Отвечать требованиям Accessibility.
5. Возможность сохранить лого с сайта.


Варианты реализации лого:

1. Обычный img;
2. Картинка в качестве CSS фона;
3. Инлайновый SVG.


Рассмотрим с конца:

Вариант 3

Решение с применением SVG, довольно популярное, оно имеет безусловный плюс, когда дело касается добавления эффектов при наведении, или анимации.

Что же по критериям. Оно соответствует практически всем критериям, но к сожалению, для поисковой выдачи наша SVG разметка будет невидима.

Дополнительно необходимо заботиться, про ассестивные технологии (скринридеры), прописывая ARIA атрибуты, не забывая указать role.

Сохранить как картинку такой вариант не получится - увы.

Итого: 3 критерия из 5

1. Работа без CSS;
2. Печать;
3. Accessibility.



Вариант 2

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

При печати фоновые изображения не отображаются(требует ручной настройки при печати), так как считаются декоративными.

Не индексируется. Требует указания ARIA атрибутов (по аналогии с SVG вариантом).

Сохранить как картинку, также не выйдет.

Итого: 1 критерий из 5

1. Accessibility.



Вариант 1

Тег img полностью самодостаточен.

Он корректно отображается не зависит от CSS. Необходимо лишь убедиться, что все атрибуты (width, height, alt) заполнены правильно.

При печати не возникает проблем, все работает без доп. настроек.

Поисковая машина, воспринимает его как контентную составляющую, и учитывает в поисковой выдачи.

Отвечает требованиям доступности "из коробки".

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

Итого: 5 критериев из 5


Вывод.

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

👌🏻 Мы - профессионалы, должны выбирать лучшее.



#css #html #aria #adviсe
8🔥3👍1👌1💯1
html.mentor(Posts) pinned «🫵🏻 Логотип. Как правильно сверстать? Лого - часть брендового стиля, это то что позволяет идентифицировать компанию/продукт, среди других конкурентов. Важная часть, не так ли? Думаю он должен отвечать некоторым стандартам качества: 1. Корректно выглядеть…»
Бета-версия Chrome 115.

➡️ Переосмысление свойства display.

Ранее спецификация CSS Display была изменена, чтобы разрешать принимать два значения.

Первое (внешнее) - для определения display родительского блока.

Второе (внутреннее) - для установки display дочерним элементам.


➡️ Анимации, управляемые прокруткой.

ScrollTimeline и ViewTimeline - расширение спецификации веб-анимации, которое позволяют использовать ускоренную анимацию на основе прокрутки.

Они могут быть объявлены и созданы как с помощью CSS, так и с помощью JavaScript.



Полезные ссылки:

🔗 Chrome beta 115
🔗
Multi-keyword syntax of display


#css #cssFuture #chrome #animation #display
6🔥1
Bootstrap NES

😏 Любопытная попытка монетизации от команды herodevs (разработчиков bootstrap).

Herodevs утверждают, что версии Bootstrap 3, 4 имеют ошибки и ряд существенных уязвимостей.

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

Разработчики предлагают никогда не обновляться. Мол мы придём, все просканируем, исправим, и вы получаете 100% современную безопасную старую версию фрейморка.

Проще говоря, это будет индивидуальное локальное решение на заказ от команды Herodevs.

🙃 Интересно, станут ли клиентами другие команды, например, разработчики JS-фреймворков, где используются старые версии Bootstrap?

Без спроса не было бы и предложения.

Я думаю, ребята из Herodevs превратили в услугу то, что делали бесплатно — устраняли собственные баги.

Хм, звучит как план? 👌🏻


🔗 Bootstrap NES


#css #js #bootstrap #framework
🔥6😁2👨‍💻2
Создаем Popover "из коробки".
Изящно, производительно, доступно. 😎

Вы можете создавать popover двумя разными способами:

1. Декларативно, через набор новых атрибутов HTML.
<button popovertarget="mypopover">Toggle the popover</button>
<div id="mypopover" popover>Popover content</div>


2. Через API JavaScript. Например, HTMLElement.togglePopover().
Подробное руководство по использованию.

Юна Кравец решила осветить подробнее тему, упомянув о приятных возможностях ванильного popover.

Полезные ссылки:

🔗 Статья Юны
🔗 Popover API MDN

#html #css

Делайте ваш код лучше друзья!👌
🔥2👨‍💻1
🤔 Align-content: Supported in Block Layout

С приходом flex и grid, вертикальное выравнивание стало обычной задачей.

Лишь старожилы помнят, какой ценой достигался нужный результат =)

Свойство align-content прекрасно работает в grid и flex раскладках, но мало кто знает, что оно работает и без них, в обычном блоке.

Пример кода:
 
<div class="box">
<div class="box__item"></div>
</div>

<style>
.box {
height: 100dvh;
align-content: center;
}

.box__item {
width: 40px;
height: 40px;
background-color: darkgray;
}
</style>


Поддержка составляет 72%,
и продолжает расти.


P. S. Любопытно, что для того же горизонтального выравнивания поддержка свойства justify-content в блочной раскладке не работает.

🔗 Can i use. Align-content: Supported in Block Layout

#css #cssfuture

Делайте ваш код лучше друзья!👌
👍5
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