#фронтенд_лайфхак
Александр Ламков — Friendly Frontend это авторский канал, который предоставляет полезные материалы по фронтенду. Ведущий канала делится своими знаниями и опытом в разработке веб-интерфейсов, используя простые и понятные слова, чтобы помочь новичкам и опытным специалистам. Здесь вы найдете самые актуальные новости из мира фронтенд разработки, а также ссылки на социальные сети, где вы можете получить дополнительную информацию и общаться с коммьюнити. Присоединяйтесь к чату нашего коммьюнити по ссылке: https://t.me/friendlyFrontendChat и подписывайтесь на YouTube канал, чтобы не пропускать новые видео: https://www.youtube.com/@AleksanderLamkov
12 Feb, 14:33
11 Feb, 06:01
after:dark:via-[#0141ff]
— это далеко не очевидный набор букв, символов и цифр, это шифр, который надо посидеть-поразбирать, прежде чем самостоятельно написать нечто подобное, чтобы получить определенный ожидаемый очевидный результат.05 Feb, 14:10
04 Feb, 05:58
31 Jan, 06:11
28 Jan, 06:01
*,
*::before,
*::after {
margin: 0;
padding: 0;
font: inherit;
color: inherit;
background: transparent;
border: none;
box-sizing: border-box;
}
before
и after
напрямую — так селектор к ним будет менее специфичным. margin-left
в ноль для элемента <h1>
? Вот и я не знаю. Да и даже тем элементам, у которых есть, к примеру, внешние отступы сверху и снизу (а это теги заголовков всех уровней), сброс в 0 нужно делать иначе — выбирать нужно лишь элементы с атрибутом class
и обрамлять селектор нужно псевдоклассом :where()
для минимизации специфичности.
3) Свойства font
и color
относятся к категории наследуемых, а это значит, что можно задать их, например, для body
и всё так же будет прекрасно работать. Да, есть элементы, для которых font
браузером задается точечно — input
, textarea
, select
и button
. Для них не помешает отдельный селектор с перечислением этих тегов.
*,
::before,
::after {
box-sizing: border-box;
}
input,
textarea,
select,
button {
font: inherit;
}
:where(
h1,
h2,
h3,
h4,
h5,
h6
):where([class]) {
margin-block: 0;
}
26 Jan, 14:17
22 Jan, 14:01
21 Jan, 06:04
19 Jan, 14:46
15 Jan, 14:56
14 Jan, 06:01
12 Jan, 15:32
07 Jan, 06:02
05 Jan, 09:32
31 Dec, 06:02
29 Dec, 15:44
25 Dec, 15:07
24 Dec, 04:02
22 Dec, 15:01
20 Dec, 06:02
19 Dec, 06:00
свойство: значение
• background-attachment: fixed
• display: contents18 Dec, 15:08
17 Dec, 04:01
16 Dec, 14:01
15 Dec, 15:19
11 Dec, 15:04
10 Dec, 04:01
08 Dec, 15:07
04 Dec, 15:41
03 Dec, 06:01
<button class="ui-lib-button" type="button">Клик</button>
и более ничего. Там будет миллион внутренних div
/ span
оберток, чтобы поддерживать все сто сценариев при работе с этим компонентом. А стили… ну, здравствуй, томик война и мир в класснейме. focus-visible
генерировала в DOM (рядом с кнопкой) абсолютно позиционированный div
, размерами с кнопку, имитирующий пунктирный контур. И это все ломало интерфейс моего приложения. Чтобы отключить этот бред, пришлось по-хитрому перехватывать событие focusin
и отменять его дальнейшее погружение и последующее всплытие. Вот пишу это спустя годы и понимаю, насколько это всё дико ненормально. 01 Dec, 15:03
29 Nov, 06:02
27 Nov, 15:06
26 Nov, 06:00
24 Nov, 15:02
22 Nov, 06:03
21 Nov, 11:00
20 Nov, 15:01
19 Nov, 06:00
18 Nov, 05:55
17 Nov, 15:01
15 Nov, 06:03
13 Nov, 15:05
12 Nov, 06:00
cursor pointer
' для <button>
всё-таки нужен. <a>
или <button>
— определяется по логике, выполняемой при взаимодействии с элементом. Если клик стриггерит переход на другую страницу (то есть браузер отдаст новую html-страницу и по итогу обновится URL в адресной строке браузера), то элемент делается ссылкой, а если в результате клика выполняется действие в рамках текущей страницы (и НЕ обновляется URL-адрес), то элемент делается кнопкой. А теперь ещё вспомним, что мы живём в эпоху SPA, где обновление URL-адреса — фикция и лишь триггер для JS-роутера, чтобы перерисовать часть DOM-дерева и предоставить пользователю "новую страницу".hover
и focus-visible
для интерактивных элементов — они сделают интерфейс куда более понятным пользователю, чем простое изменение cursor
. 10 Nov, 15:02
08 Nov, 06:03
06 Nov, 15:01
06 Nov, 10:35
var(--color-text)
, если можно юзать "удобные" Sass-переменные а-ля $color-text
. $color-text
, всё это будет заменено на конкретное значение цвета, прописанное в исходном коде. А работать с переменными стилей в рантайме — необходимость (пример покажу в конце).--color-text
в рамках селектора .box {}
, все DOM-элементы, находящиеся внутри элемента с классом box
, будут иметь доступ к CSS-переменной --color-text
.$color-text
в рамках селектора .box {}
, будет доступна только в рамках конкретного селектора и во всех его вложенных селекторах.
<button class="button">
<span class="button__label">Клик</button>
</button>
.button {
$color-text: red;
&__label {
color: $color-text;
}
}
.button {
$color-text: red;
}
.button__label {
color: $color-text;
}
:root {}
объявляется набор CSS-переменных а-ля color-text
и color-bg
, которые затем повсеместно используются в свойствах color
и background-color
. При нажатии на кнопочку смены темы, через JS добавляется условный класс is-dark-theme
корневому элементу DOM-дерева <html>
. Затем в CSS-коде подвязываются на этот класс в селекторе :root.is-dark-theme {}
, в рамках которого меняют значения CSS-переменных color-text
и color-bg
. Использовать Sass-переменные таким же образом уже бы не получилось.$color-text
и $border-radius
для браузера это уже #ff3636
и 24.5px
, и он знать не знает о том, как всё выглядело в вашем исходном коде.$variable
для Sass-миксинов, функций и циклов, а --variable
и var(--variable)
— для всего остального, что важно сохранить в CSS. 03 Nov, 15:01
01 Nov, 06:04
30 Oct, 15:03
27 Oct, 15:11
25 Oct, 06:02
24 Oct, 15:52
23 Oct, 15:00
22 Oct, 06:12
21 Oct, 15:01
20 Oct, 18:06
18 Oct, 06:15
17 Oct, 15:28
16 Oct, 15:03
15 Oct, 06:02
13 Oct, 15:08
11 Oct, 22:41
11 Oct, 06:03