Очень удобное свойство для flex-box: gap
Изначально это свойство было введено для grid-контейнеров, но также поддерживается в flex-контейнерах. Оно позволяет задать отступы между элементами без необходимости использования дополнительных отступов (
В случае использования
Свойство
Изначально это свойство было введено для grid-контейнеров, но также поддерживается в flex-контейнерах. Оно позволяет задать отступы между элементами без необходимости использования дополнительных отступов (
margin).В случае использования
margin, запись выглядит многословнее. Кроме того, этот вариант плохо работает, когда появляется несколько строк.Свойство
gap же отлично справляется с этим! При желании вы можете задать разные отступы для строк и столбцов, используя свойства row-gap и column-gap соответственно❤1
  Какие темы во фронтенде вызывают у вас больше всего трудностей?
  Anonymous Poll
    5%
    Верстка и CSS
      
    29%
    JavaScript и алгоритмы и структуры данных
      
    14%
    Работа с API и AJAX запросы
      
    67%
    Оптимизация производительности
      
    5%
    Адаптивный дизайн и медиазапросы
      
    24%
    Тестирование и отладка кода
      
    57%
    Инструменты сборки и конфигурация (Webpack, Babel и т.д.)
      
    14%
    Работа с фреймворками (React, Vue, Angular)
      
    0%
    Что-то другое (пишите в комментариях)
      
    📚 Библиотека 
Несколько интересных хуков оттуда:
- Хуки для работы с состоянием:
- Хуки для сайд-эффектов:
- Хуки для событий:
Библиотека предоставляет много готовых и протестированных решений, а также активно поддерживается и развивается.
Подробнее познакомиться с
А какие удобные библиотеки используете вы? Делитесь в комментариях! 💬
  
  react-use – это популярная коллекция различных удобных хуков для React. Она включает как базовые, так и более сложные хуки, которые могут существенно ускорить разработку и уменьшить количество кода в вашем проекте.Несколько интересных хуков оттуда:
- Хуки для работы с состоянием:
useToggle, useCounter и т.д.- Хуки для сайд-эффектов:
useDebounce, useThrottle, useTimeout, useInterval и т.д.- Хуки для событий:
useMouse, useScroll, useResize и т.д.Библиотека предоставляет много готовых и протестированных решений, а также активно поддерживается и развивается.
Подробнее познакомиться с
react-use и его возможностями можно здесь.А какие удобные библиотеки используете вы? Делитесь в комментариях! 💬
GitHub
  
  GitHub - streamich/react-use: React Hooks — 👍
  React Hooks — 👍. Contribute to streamich/react-use development by creating an account on GitHub.
  
  Настя Котова // Frontend & Node.js
Как и обещали, возвращаемся к вам с разбором задачи с LeetCode!)  Ставьте лайки этому видео и пишите в комментариях, какие еще задачи разобрать 💻  https://youtu.be/c44ISTawL1c
  
  YouTube
  
  9 LeetCode - Разбор задач для собеседований
  9. Palindrome Number - Разбор задач для собеседований
📌 https://leetcode.com/problems/palindrome-number
Приветствуем всех на нашем канале! В этом видео решаем задачу по алгоритмам с платформы LeetCode, которая поможет вам улучшить свои навыки программирования…
  📌 https://leetcode.com/problems/palindrome-number
Приветствуем всех на нашем канале! В этом видео решаем задачу по алгоритмам с платформы LeetCode, которая поможет вам улучшить свои навыки программирования…
UI-библиотеки значительно упрощают работу фронтенд-разрабочиков, предоставляя готовые инструменты для разработки красивых и функциональных интерфейсов. Сегодня мы хотели бы поделиться подборкой различных UI-китов для самых популярных в данный момент фреймворков, в которой разобрали их плюсы, минусы и тонкости применения
Смотреть подборку ⬇️
  
  Смотреть подборку ⬇️
Telegraph
  
  Подборка UI-библиотек для React, Angular, Vue и Svelte
  UI-библиотека, также известная как UI-kit (от англ. User Interface Kit) — это набор готовых компонентов и инструментов, предназначенных для разработки пользовательского интерфейса. Эти компоненты включают в себя различные элементы дизайна, такие как кнопки…
  Полезный метод в JavaScript: 
Раньше, чтобы получить элемент по индексу, мы использовали традиционный способ:
Но с методом
Этот метод является частью нового стандарта ECMAScript и поддерживается в современных браузерах.
Array.at() 🚀Раньше, чтобы получить элемент по индексу, мы использовали традиционный способ:
const arr = [10, 20, 30, 40, 50];
console.log(arr[0]); // 10
console.log(arr[arr.length - 1]); // 50
Но с методом
at() всё стало еще проще и удобнее!
const arr = [10, 20, 30, 40, 50];
console.log(arr.at(0)); // 10
console.log(arr.at(-1)); // 50, элемент с конца массива
Этот метод является частью нового стандарта ECMAScript и поддерживается в современных браузерах.
🔥4
  Вы когда-нибудь задумывались, чем отличаются Babel и Webpack, в чем преимущества Vite, почему все говорят о Turbopack и при чем здесь Rust?
Во множестве доступных ныне инструментов легко запутаться, но я постаралась разобраться и описала все в новой статье.
Погружаемся в мир сборщиков
А если у вас еще остались вопросы или появились новые после прочтения (лично у меня точно есть парочка!), пишите их в комментарии 💬
  
  Во множестве доступных ныне инструментов легко запутаться, но я постаралась разобраться и описала все в новой статье.
Погружаемся в мир сборщиков
А если у вас еще остались вопросы или появились новые после прочтения (лично у меня точно есть парочка!), пишите их в комментарии 💬
Telegraph
  
  Webpack, Babel, Vite и другие инструменты: что, зачем и в чем отличия
  Anastasia Kotova В современном фронтенде существуют различные инструменты, которые помогают оптимизировать и автоматизировать процесс разработки и сборки приложений. Давайте посмотрим на самые популярные из них и разберемся, чем они отличаются друг от друга.…
🔥2
  This media is not supported in your browser
    VIEW IN TELEGRAM
  Вы когда-нибудь замечали, что при использовании якорей или скроллинга с JavaScript, контент может "прилипать" к верхней части окна, находясь под фиксированной шапкой или меню?
Свойство
📖 Пример:
Подробнее в документации
  Свойство
scroll-padding позволяет задать отступы внутри элемента, влияющие на прокрутку его содержимого.📖 Пример:
.Container {
height: 100vh;
display: flex;
flex-direction: column;
}
.FixedHeader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 50px;
background: #2d0094;
}
.Content {
overflow-y: auto;
scroll-padding-top: 50px;
}
Подробнее в документации
ChatGPT и будущее фронтенда
    Codeca Frontend
  🔥 Мы пробуем новые форматы!
Это первый наш подкаст, ждем ваш фидбек в комментариях!
Таймкоды:
00:00 - Заменит ли GPT разработчиков
10:36 - Как можно использовать GPT уже сейчас, чтобы быть эффективным
18:20 - Страх всего нового - худший враг разработчика
22:50 - Что нужно знать, чтобы всегда оставаться нужным в профессии
#подкаст
Это первый наш подкаст, ждем ваш фидбек в комментариях!
Таймкоды:
00:00 - Заменит ли GPT разработчиков
10:36 - Как можно использовать GPT уже сейчас, чтобы быть эффективным
18:20 - Страх всего нового - худший враг разработчика
22:50 - Что нужно знать, чтобы всегда оставаться нужным в профессии
#подкаст
🔥1
  Фронтенд-разработчикам полезно иметь набитый глаз в UI, чтобы делать удобные и красивые интерфейсы даже без дизайна.
https://cantunsee.space/ — это интересный квиз, в котором можно потренироваться искать проблемы в дизайне. Попробуйте и вы, это помогает расти как профи!
  
  https://cantunsee.space/ — это интересный квиз, в котором можно потренироваться искать проблемы в дизайне. Попробуйте и вы, это помогает расти как профи!
cantunsee.space
  
  Can't Unsee
  A game where you need to pick the design that is most correct. Test your attention to details!
  Слышали ли вы что-нибудь о таком хуке React, как 
Этот хук может быть очень полезен в разработке, однако он имеет и свои нюансы, про которые нужно знать.
Что такое useLayoutEffect
  
  useLayoutEffect?Этот хук может быть очень полезен в разработке, однако он имеет и свои нюансы, про которые нужно знать.
Что такое useLayoutEffect
Telegraph
  
  Что такое useLayoutEffect?
  В React есть интересный хук - useLayoutEffect. С первого взгляда, его можно спутать с useEffect, однако между ними есть одно существенное различие. Исходя из документации React, useLayoutEffect — это версия useEffect, которая срабатывает до того, как браузер…
  Удобное свойство inset в CSS!
Это сокращённое свойство, которое объединяет в себе определения для четырех других свойств:
Оно позволяет задавать отступы элемента от соответствующих сторон его родительского элемента одним коротким выражением.
А также можно использовать сокращенные варианты, как у свойств
  Это сокращённое свойство, которое объединяет в себе определения для четырех других свойств:
top, right, bottom и left.Оно позволяет задавать отступы элемента от соответствующих сторон его родительского элемента одним коротким выражением.
А также можно использовать сокращенные варианты, как у свойств
margin и padding. Например, если указать у абсолютно позиционированного элемента inset: 0, то этот элемент растянется по контейнеру.Все вы знаете свойство 
Параметр
Параметр
Таким образом, значение
  text-wrap, с помощью которого можно указать, переносить текст в контейнере или нет. Однако у этого свойства есть два интересных параметра: balance и pretty.Параметр
balance помогает сбалансировать строки текста так, чтобы обеспечить равномерное распределение слов по строкам. Сравните отображение с text-wrap: wrap и text-wrap: balance. Однако, это свойство работает только для коротких текстов (меньше 6 или 10 строк, в зависимости от браузера).Параметр
pretty наоборот предназначен для длинных текстовых блоков, где хорошая типографика важнее производительности. Он делает множество улучшений, связанных с переносами, в частности предотвращает появление одиноких слов в конце абзаца. Сравните отображение с text-wrap: wrap и text-wrap: pretty для длинного текста.Таким образом, значение
balance можно использовать для заголовков, а значение pretty для основного текста. Однако, стоит учитывать, что сейчас данные возможности поддерживаются не всеми браузерами. Подробнее про поддержку можно посмотреть на MDN.Если вдруг вам нужно полностью избавиться от специфических стилей элемента, и вернуть его к исходным настройкам браузера, 
Читайте подробнее в документации
  
  all: initial; сделает это за вас. Это может быть полезно, когда вы работаете с внешними библиотеками и хотите избежать нежелательных стилей.Читайте подробнее в документации
MDN Web Docs
  
  all - CSS: каскадные таблицы стилей | MDN
  Сокращённое свойство CSS all сбрасывает все свойства, кроме unicode-bidi и direction, до их начального или унаследованного значения.
  
  Настя Котова // Frontend & Node.js
Все вы знаете свойство text-wrap, с помощью которого можно указать, переносить текст в контейнере или нет. Однако у этого свойства есть два интересных параметра: balance и pretty.  Параметр balance помогает сбалансировать строки текста так, чтобы обеспечить…
  
Как проверить поддержку css-свойства в браузере?
В одном из предыдущих постов мы обсуждали достаточно специфичные значения свойства
Например, мы бы могли переписать пример из предыдущего поста так, чтобы применять значения, только если они поддерживаются данным браузером, а в противном случае, если свойство не поддерживается, акцентировать это цветом.
Таким образом, с помощью директивы
  В одном из предыдущих постов мы обсуждали достаточно специфичные значения свойства
text-wrap, который на данный момент поддерживаются не всеми браузерами. Но как убедиться в момент, что текущий браузер поддерживает ту или иную опцию?@supports — это правило CSS, которое позволяет проверять, поддерживает ли браузер определённое свойство или его значение. Если свойство поддерживается, то стили, вложенные в @supports, применяются.Например, мы бы могли переписать пример из предыдущего поста так, чтобы применять значения, только если они поддерживаются данным браузером, а в противном случае, если свойство не поддерживается, акцентировать это цветом.
Таким образом, с помощью директивы
@support вы можете не только проверять доступность свойств прямо в CSS, но и использовать фоллбеки при необходимости.This media is not supported in your browser
    VIEW IN TELEGRAM
  Как сделать свой контент интерактивным?
Часто это свойство используют для реализации собственных текстовых редакторов или какого-то специфичного интерфейсного решения, связанного с редактированием. Но, конечно, не стоит забывать, что для обычных форм с заполнением данных лучше всего подходят нативные теги
  contenteditable — это атрибут HTML, который можно добавить к любому элементу, чтобы сделать его редактируемым. Когда этот атрибут установлен, пользователь может кликнуть по элементу и начать вносить изменения в текстовое содержимое.
export const EditableRow: FC = () => {
return (
<p className="EditableRow" contentEditable="true">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
nibh euismod tincidunt ut laoreet dolore magna aliquam erat.
</p>
);
};
Часто это свойство используют для реализации собственных текстовых редакторов или какого-то специфичного интерфейсного решения, связанного с редактированием. Но, конечно, не стоит забывать, что для обычных форм с заполнением данных лучше всего подходят нативные теги
input и textarea.Особенность клавиатурного управления в Safari
Основной способ обеспечения доступности в браузере — это возможность управления с помощью клавиатуры. Это позволяет пользователям без использования мыши беспрепятственно переходить по интерактивным элементам сайта, таким как кнопки и ссылки. Так, в большинстве браузеров для перемещения по элементам используется клавиша
Однако особое внимание стоит уделить Safari: в этом браузере по умолчанию не работает переход между кнопками и ссылками с помощью клавиши
Основной способ обеспечения доступности в браузере — это возможность управления с помощью клавиатуры. Это позволяет пользователям без использования мыши беспрепятственно переходить по интерактивным элементам сайта, таким как кнопки и ссылки. Так, в большинстве браузеров для перемещения по элементам используется клавиша
Tab, а для обратного перемещения — сочетание Shift + Tab.Однако особое внимание стоит уделить Safari: в этом браузере по умолчанию не работает переход между кнопками и ссылками с помощью клавиши
Tab. Вместо этого нужно использовать сочетание Option + Tab для переключения фокуса. Если же вы хотите использовать стандартный метод с Tab, необходимо включить эту функцию в расширенных настройках браузера.👍1
  Кастомизация ввода даты с помощью showPicker()
Иногда нам может понадобиться использовать стандартный ввод даты с помощью элемента
Тут на помощь может прийти метод
Данный метод существует для множества видов инпутов – date, month, week, time, datetime-local, color и file. Однако для каждого вида есть свои ограничения в поддержке различными браузерами. Например, выбор времени, недели и месяца не будет работать в Firefox. Подробнее с поддержкой можно ознакомиться на caniuse.
Для выбора даты в некоторых старых браузерах можно использовать обходной вариант с эмуляцией фокуса и клика по инпуту. Однако этот подход всё ещё может быть рискованным, поэтому всегда советуем тестировать решение на разных платформах, которые поддерживает ваше приложение.
  Иногда нам может понадобиться использовать стандартный ввод даты с помощью элемента
input[type='date'], но при этом хочется кастомизировать триггер, который будет по клику открывать календарь для выбора даты. Тут на помощь может прийти метод
showPicker() – относительно новая возможность определённых видов элемента input открывать пикер программно. Таким образом, можно скрыть сам инпут за стилизованной кнопкой, но при клике на неё вызывать открытие календаря. Данный метод существует для множества видов инпутов – date, month, week, time, datetime-local, color и file. Однако для каждого вида есть свои ограничения в поддержке различными браузерами. Например, выбор времени, недели и месяца не будет работать в Firefox. Подробнее с поддержкой можно ознакомиться на caniuse.
Для выбора даты в некоторых старых браузерах можно использовать обходной вариант с эмуляцией фокуса и клика по инпуту. Однако этот подход всё ещё может быть рискованным, поэтому всегда советуем тестировать решение на разных платформах, которые поддерживает ваше приложение.
Используем debugger в JavaScript для эффективной отладки кода
Команда
1. Добавьте
2. Откройте DevTools, перейдите в раздел "Sources", и вы увидите, что выполнение остановилось в месте, где вы вставили
Также вы можете использовать
  Команда
debugger; служит для того, чтобы приостановить выполнение кода и открыть инструменты отладки в вашем браузере. Когда интерпретатор кода встречает debugger;, он автоматически останавливает выполнение перед этой строкой, если режим отладки включен, и позволяет вам исследовать текущее состояние программы.1. Добавьте
debugger; в нужную строку вашего JavaScript-кода2. Откройте DevTools, перейдите в раздел "Sources", и вы увидите, что выполнение остановилось в месте, где вы вставили
debugger;Также вы можете использовать
debugger; в условных операторах для отладки только при выполнении определенных условий.Одна из самых мощных функций DevTools - это возможность ставить точки останова в JavaScript-коде. В прошлом посте мы рассмотрели один из удобных способов это сделать - с помощью команды 
Инструменты отладки: точки останова и дебаг в DevTools
  
  debugger; в JavaScript. Сегодня же поговорим поподробнее, как работать с точками останова в DevTools на примере Google Chrome.Инструменты отладки: точки останова и дебаг в DevTools
Telegraph
  
  Инструменты отладки: точки останова и дебаг в DevTools
  Точка останова (breakpoint) — это маркер в вашем коде, который останавливает выполнение программы в определенной строке. Это позволяет вам проанализировать текущее состояние программы, исследовать значения переменных и понять, как протекает выполнение. Как…
  Оптимизация хранения данных с помощью битовой маски в JavaScript
Битовые маски - это специальный инструмент в программировании, который позволяет использовать отдельные биты числа для хранения множественных булевых значений. Это особенно удобно, когда нужно оптимизировать память и получать быстрый доступ к данным.
Представьте, что у вас есть интерфейс, в котором у пользователя доступны различные флаги для конфигурации (например, показывать кнопку с новым функционалом или дать доступ к новой странице). Такое может понадобиться, когда вы разрабатываете большую фичу и хотите держать её код в основной ветке, но при этом не готовы открывать фичу всем пользователям, пока не протестируете.
Мы можем хранить данные об активных флагах в cookie, для того чтобы иметь к ним доступ во время SSR (server side rendering). Но максимальный объем хранимой информации в cookie сильно ограничен, а флагов может быть большое количество. Поэтому, вместо использования нескольких переменных, мы можем хранить все эти флаги в одном числе.
С помощью побитовых операций (
Битовые маски - это специальный инструмент в программировании, который позволяет использовать отдельные биты числа для хранения множественных булевых значений. Это особенно удобно, когда нужно оптимизировать память и получать быстрый доступ к данным.
Представьте, что у вас есть интерфейс, в котором у пользователя доступны различные флаги для конфигурации (например, показывать кнопку с новым функционалом или дать доступ к новой странице). Такое может понадобиться, когда вы разрабатываете большую фичу и хотите держать её код в основной ветке, но при этом не готовы открывать фичу всем пользователям, пока не протестируете.
Мы можем хранить данные об активных флагах в cookie, для того чтобы иметь к ним доступ во время SSR (server side rendering). Но максимальный объем хранимой информации в cookie сильно ограничен, а флагов может быть большое количество. Поэтому, вместо использования нескольких переменных, мы можем хранить все эти флаги в одном числе.
const NEW_BUTTON_FLAG = 1; // 0001
const NEW_PAGE_FLAG = 2; // 0010
const NEW_FORM_FLAG = 4; // 0100
const NEW_API_FLAG = 8; // 1000
let userFlags = 0;
// Включаем нужные флаги
userFlags = userFlags | NEW_FORM_FLAG | NEW_BUTTON_FLAG; // 0101
// Проверяем, активен ли флаг у пользователя
const showNewForm = (userFlags & NEW_FORM_FLAG) !== 0; // true
const showPageForm = (userFlags & NEW_PAGE_FLAG) !== 0; // false
// Убираем флаг
userFlags &= ~NEW_BUTTON_FLAG;
console.log(userFlags.toString(2)); // 100
С помощью побитовых операций (
|, & и ~) мы можем добавлять, удалять, а также проверять флаги.❤1👍1