⚡️Хотите научиться писать надежные тесты для React-приложений и улучшить свои навыки в тестировании?
Присоединяйтесь к открытому уроку «Тестирование React-приложений с помощью React Testing Library» 23 июля в 20:00 МСК! Разберем:
- Основы React Testing Library (RTL): философию и ключевые принципы.
- Разницу между RTL и Enzyme, и почему RTL — лучший выбор.
- Как тестировать рендеринг, события, асинхронный код и кастомные хуки.
Это отличная возможность перед стартом курса «React.js Developer» от OTUS. Все участники получат скидку на обучение и полезные материалы для дальнейшего изучения.
👉Регистрация открыта: https://vk.cc/cNMUv5
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Присоединяйтесь к открытому уроку «Тестирование React-приложений с помощью React Testing Library» 23 июля в 20:00 МСК! Разберем:
- Основы React Testing Library (RTL): философию и ключевые принципы.
- Разницу между RTL и Enzyme, и почему RTL — лучший выбор.
- Как тестировать рендеринг, события, асинхронный код и кастомные хуки.
Это отличная возможность перед стартом курса «React.js Developer» от OTUS. Все участники получат скидку на обучение и полезные материалы для дальнейшего изучения.
👉Регистрация открыта: https://vk.cc/cNMUv5
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 Трюк с
Вместо создания длинных условий или классов, можно использовать spread-оператор и логические выражения прямо в объекте стилей:
📌 Что тут происходит:
*
* Альтернатива classnames для inline-стилей;
* Чисто, читаемо и удобно при большом числе условий.
🧠 Подходит, когда используете inline-стили (например, в дизайн-системах или при генерации email-шаблонов).
💡 Можно комбинировать с memo-компонентами и кастомными хуками, чтобы минимизировать ререндеры и повысить производительность.
👉 @frontend_1
style
в React, который упростит работу с динамическими стилямиВместо создания длинных условий или классов, можно использовать spread-оператор и логические выражения прямо в объекте стилей:
<div
style={{
padding: '16px',
...(isError && { border: '1px solid red' }),
...(isActive ? { backgroundColor: '#def' } : { opacity: 0.5 }),
}}
>
Hello!
</div>
📌 Что тут происходит:
*
...(условие && { стиль })
добавит стиль, если условие true
;* Альтернатива classnames для inline-стилей;
* Чисто, читаемо и удобно при большом числе условий.
🧠 Подходит, когда используете inline-стили (например, в дизайн-системах или при генерации email-шаблонов).
💡 Можно комбинировать с memo-компонентами и кастомными хуками, чтобы минимизировать ререндеры и повысить производительность.
👉 @frontend_1
👍3
Мини-хак:
Современные браузеры уже поддерживают
Пример: показать рамку у карточки, если внутри есть картинка:
Ещё круче: стилизовать соседний элемент, если внутри инпута что-то введено:
Зачем это нужно?
— Меньше JS → проще поддержка
— Новый уровень гибкости для UI
Документация: MDN про :has()
Пробуйте! Это реально меняет подход к верстке.
👉 @frontend_1
:has()
в CSS — меньше JS для интерактивности 🎯Современные браузеры уже поддерживают
:has()
— “родительский селектор”, который раньше приходилось эмулировать на JS.Пример: показать рамку у карточки, если внутри есть картинка:
.card:has(img) {
border: 2px solid #4ade80;
}
Ещё круче: стилизовать соседний элемент, если внутри инпута что-то введено:
.input-wrapper:has(input:focus) label {
color: #3b82f6;
}
Зачем это нужно?
— Меньше JS → проще поддержка
— Новый уровень гибкости для UI
Документация: MDN про :has()
Пробуйте! Это реально меняет подход к верстке.
👉 @frontend_1
👍3
Хотите углубить знания в JavaScript и работать с самыми популярными фреймворками? Прокачайте свои навыки до профессионального уровня с курсом «JavaScript Developer. Professional» от OTUS.
Мы предлагаем практический курс, где вы:
- Изучите передовые технологии, такие как ReactJS, Angular, Vue, Node.js и другие.
- Научитесь работать с такими инструментами, как Webpack, TDD, и PostgreSQL.
- Примените знания на практике: создадите сложные веб-приложения, протестируете их, организуете хранение данных и многое другое.
Вы сможете:
• Создавать приложения для реальных проектов.
• Применять паттерны проектирования.
• Работать с асинхронностью, тестированием, оптимизацией.
Пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cNWXTl
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Мы предлагаем практический курс, где вы:
- Изучите передовые технологии, такие как ReactJS, Angular, Vue, Node.js и другие.
- Научитесь работать с такими инструментами, как Webpack, TDD, и PostgreSQL.
- Примените знания на практике: создадите сложные веб-приложения, протестируете их, организуете хранение данных и многое другое.
Вы сможете:
• Создавать приложения для реальных проектов.
• Применять паттерны проектирования.
• Работать с асинхронностью, тестированием, оптимизацией.
Пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cNWXTl
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🚀 Быстрое улучшение Lighthouse:
Хотите ускорить рендер длинных страниц без костылей? Используйте CSS-свойство:
Что делает:
- Браузер не рендерит невидимые элементы (за пределами вьюпорта);
- Сохраняет размер блока для скролла;
- Экономит ресурсы → First Paint быстрее, Lighthouse выше.
Где применять:
- Списки (товары, посты);
- Длинные страницы;
- Виджеты ниже фолда.
⚠️ Осторожно: не ставьте на элементы с динамическим контентом, где важно мгновенное измерение размеров.
Можно добавить
2 строки — и сайт ощущается быстрее ✨
👉 @frontend_1
content-visibility
Хотите ускорить рендер длинных страниц без костылей? Используйте CSS-свойство:
.card {
content-visibility: auto;
}
Что делает:
- Браузер не рендерит невидимые элементы (за пределами вьюпорта);
- Сохраняет размер блока для скролла;
- Экономит ресурсы → First Paint быстрее, Lighthouse выше.
Где применять:
- Списки (товары, посты);
- Длинные страницы;
- Виджеты ниже фолда.
⚠️ Осторожно: не ставьте на элементы с динамическим контентом, где важно мгновенное измерение размеров.
Можно добавить
contain-intrinsic-size
→ убрать "скачок" при появлении.
.card {
content-visibility: auto;
contain-intrinsic-size: 300px;
}
2 строки — и сайт ощущается быстрее ✨
👉 @frontend_1
👍6
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://yangx.top/bash_srv Bash Советы
https://yangx.top/win_sysadmin Системный Администратор Windows
https://yangx.top/sysadmin_girl Девочка Сисадмин
https://yangx.top/srv_admin_linux Админские угодья
https://yangx.top/linux_srv Типичный Сисадмин
https://yangx.top/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://yangx.top/linux_odmin Linux: Системный администратор
https://yangx.top/devops_star DevOps Star (Звезда Девопса)
https://yangx.top/i_linux Системный администратор
https://yangx.top/linuxchmod Linux
https://yangx.top/sys_adminos Системный Администратор
https://yangx.top/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://yangx.top/sysadminof Книги для админов, полезные материалы
https://yangx.top/i_odmin Все для системного администратора
https://yangx.top/i_odmin_book Библиотека Системного Администратора
https://yangx.top/i_odmin_chat Чат системных администраторов
https://yangx.top/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://yangx.top/sysadminoff Новости Линукс Linux
1C разработка 📌
https://yangx.top/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://yangx.top/DevLab1C 1С:Предприятие 8
https://yangx.top/razrab_1C 1C Разработчик
https://yangx.top/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://yangx.top/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://yangx.top/cpp_lib Библиотека C/C++ разработчика
https://yangx.top/cpp_knigi Книги для программистов C/C++
https://yangx.top/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://yangx.top/pythonofff Python академия.
https://yangx.top/BookPython Библиотека Python разработчика
https://yangx.top/python_real Python подборки на русском и английском
https://yangx.top/python_360 Книги по Python
Java разработка 📌
https://yangx.top/BookJava Библиотека Java разработчика
https://yangx.top/java_360 Книги по Java Rus
https://yangx.top/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://yangx.top/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://yangx.top/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://yangx.top/developer_mobila Мобильная разработка
https://yangx.top/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://yangx.top/frontend_1 Подборки для frontend разработчиков
https://yangx.top/frontend_sovet Frontend советы, примеры и практика!
https://yangx.top/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://yangx.top/game_devv Все о разработке игр
Библиотеки 📌
https://yangx.top/book_for_dev Книги для программистов Rus
https://yangx.top/programmist_of Книги по программированию
https://yangx.top/proglb Библиотека программиста
https://yangx.top/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://yangx.top/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://yangx.top/bookflow Лекции, видеоуроки, доклады с IT конференций
https://yangx.top/rust_lib Полезный контент по программированию на Rust
https://yangx.top/golang_lib Библиотека Go (Golang) разработчика
https://yangx.top/itmozg Программисты, дизайнеры, новости из мира IT
https://yangx.top/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://yangx.top/nodejs_lib Подборки по Node js и все что с ним связано
https://yangx.top/ruby_lib Библиотека Ruby программиста
https://yangx.top/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://yangx.top/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://yangx.top/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://yangx.top/thehaking Канал о кибербезопасности
https://yangx.top/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://yangx.top/ux_web Статьи, книги для дизайнеров
Математика 📌
https://yangx.top/Pomatematike Канал по математике
https://yangx.top/phis_mat Обучающие видео, книги по Физике и Математике
https://yangx.top/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://yangx.top/Excel_lifehack
https://yangx.top/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://yangx.top/sysadmin_rabota Системный Администратор
https://yangx.top/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://yangx.top/bash_srv Bash Советы
https://yangx.top/win_sysadmin Системный Администратор Windows
https://yangx.top/sysadmin_girl Девочка Сисадмин
https://yangx.top/srv_admin_linux Админские угодья
https://yangx.top/linux_srv Типичный Сисадмин
https://yangx.top/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://yangx.top/linux_odmin Linux: Системный администратор
https://yangx.top/devops_star DevOps Star (Звезда Девопса)
https://yangx.top/i_linux Системный администратор
https://yangx.top/linuxchmod Linux
https://yangx.top/sys_adminos Системный Администратор
https://yangx.top/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://yangx.top/sysadminof Книги для админов, полезные материалы
https://yangx.top/i_odmin Все для системного администратора
https://yangx.top/i_odmin_book Библиотека Системного Администратора
https://yangx.top/i_odmin_chat Чат системных администраторов
https://yangx.top/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://yangx.top/sysadminoff Новости Линукс Linux
1C разработка 📌
https://yangx.top/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://yangx.top/DevLab1C 1С:Предприятие 8
https://yangx.top/razrab_1C 1C Разработчик
https://yangx.top/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://yangx.top/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://yangx.top/cpp_lib Библиотека C/C++ разработчика
https://yangx.top/cpp_knigi Книги для программистов C/C++
https://yangx.top/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://yangx.top/pythonofff Python академия.
https://yangx.top/BookPython Библиотека Python разработчика
https://yangx.top/python_real Python подборки на русском и английском
https://yangx.top/python_360 Книги по Python
Java разработка 📌
https://yangx.top/BookJava Библиотека Java разработчика
https://yangx.top/java_360 Книги по Java Rus
https://yangx.top/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://yangx.top/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://yangx.top/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://yangx.top/developer_mobila Мобильная разработка
https://yangx.top/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://yangx.top/frontend_1 Подборки для frontend разработчиков
https://yangx.top/frontend_sovet Frontend советы, примеры и практика!
https://yangx.top/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://yangx.top/game_devv Все о разработке игр
Библиотеки 📌
https://yangx.top/book_for_dev Книги для программистов Rus
https://yangx.top/programmist_of Книги по программированию
https://yangx.top/proglb Библиотека программиста
https://yangx.top/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://yangx.top/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://yangx.top/bookflow Лекции, видеоуроки, доклады с IT конференций
https://yangx.top/rust_lib Полезный контент по программированию на Rust
https://yangx.top/golang_lib Библиотека Go (Golang) разработчика
https://yangx.top/itmozg Программисты, дизайнеры, новости из мира IT
https://yangx.top/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://yangx.top/nodejs_lib Подборки по Node js и все что с ним связано
https://yangx.top/ruby_lib Библиотека Ruby программиста
https://yangx.top/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://yangx.top/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://yangx.top/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://yangx.top/thehaking Канал о кибербезопасности
https://yangx.top/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://yangx.top/ux_web Статьи, книги для дизайнеров
Математика 📌
https://yangx.top/Pomatematike Канал по математике
https://yangx.top/phis_mat Обучающие видео, книги по Физике и Математике
https://yangx.top/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://yangx.top/Excel_lifehack
https://yangx.top/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://yangx.top/sysadmin_rabota Системный Администратор
https://yangx.top/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по CSS 💡
Используйте табличные цифры для отображения таймеров ✅
https://www.codewithshripal.com/playground/css/use-tabular-number-for-timers
👉 @frontend_1
Используйте табличные цифры для отображения таймеров ✅
https://www.codewithshripal.com/playground/css/use-tabular-number-for-timers
👉 @frontend_1
👍8❤2🔥2
🪄 Трюк: «Скелетон» без JS
При загрузке данных часто ставят
📌 Как использовать:
1. Создаёте
2. Размеры задаёте под будущий элемент (картинка, текст).
3. Меняете на реальные данные после загрузки.
Плюсы:
- Нет лишнего JS.
- Лёгко адаптировать под любую форму.
- Современный UI → выглядит «дорого».
👉 @frontend_1
При загрузке данных часто ставят
Spinner
. Но современный UX → Skeleton (серый шаблон контента). И делать его можно без JS!
.skeleton {
background: linear-gradient(
90deg,
#e0e0e0 25%,
#f0f0f0 50%,
#e0e0e0 75%
);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
border-radius: 8px;
}
@keyframes shimmer {
100% {
background-position: -200% 0;
}
}
📌 Как использовать:
1. Создаёте
div
с классом .skeleton
вместо контента.2. Размеры задаёте под будущий элемент (картинка, текст).
3. Меняете на реальные данные после загрузки.
Плюсы:
- Нет лишнего JS.
- Лёгко адаптировать под любую форму.
- Современный UI → выглядит «дорого».
👉 @frontend_1
👍9❤1
🤩Хотите, чтобы ваши React-приложения не просто работали, а вызывали вау-эффект?
Присоединяйтесь к открытому уроку «Анимируем React: от нуля до вау-эффекта» 12 августа в 20:00 МСК. Мы покажем, как создать живые, отзывчивые интерфейсы с помощью библиотеки анимаций Framer Motion и API Intersection Observer. Разберём, как добавить современный UX без перегрузки сторонними библиотеками, чтобы каждый элемент интерфейса был динамичным и запоминающимся.
Освойте практические подходы и техники, которые используют профессионалы для создания визуально выразительных интерфейсов. Получите знания, которые значительно улучшат ваш опыт в React.
⚡️Присоединяйтесь к открытому вебинару и получите скидку на курс «React.js Developer»: https://vk.cc/cOmfRV
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Присоединяйтесь к открытому уроку «Анимируем React: от нуля до вау-эффекта» 12 августа в 20:00 МСК. Мы покажем, как создать живые, отзывчивые интерфейсы с помощью библиотеки анимаций Framer Motion и API Intersection Observer. Разберём, как добавить современный UX без перегрузки сторонними библиотеками, чтобы каждый элемент интерфейса был динамичным и запоминающимся.
Освойте практические подходы и техники, которые используют профессионалы для создания визуально выразительных интерфейсов. Получите знания, которые значительно улучшат ваш опыт в React.
⚡️Присоединяйтесь к открытому вебинару и получите скидку на курс «React.js Developer»: https://vk.cc/cOmfRV
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤1
Почему стоит использовать Tagged Unions при разработке на TypeScript
Сегодня я хочу поговорить на тему Tagged Unions (размеченных объединений) и объяснить, почему они ваш секретный инструмент для написания надежного TypeScript-кода.
https://habr.com/ru/companies/megafon/articles/933752/
👉 @frontend_1
Сегодня я хочу поговорить на тему Tagged Unions (размеченных объединений) и объяснить, почему они ваш секретный инструмент для написания надежного TypeScript-кода.
https://habr.com/ru/companies/megafon/articles/933752/
👉 @frontend_1
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
CSS совет 💡
Возможно, вы не знали, что в CSS можно задавать поворот, используя единицу измерения
👉 @frontend_1
Возможно, вы не знали, что в CSS можно задавать поворот, используя единицу измерения
turn
👉 @frontend_1
👍6
Spellbook of Modern Web Dev
🧙♂️ Книга заклинаний современного веб-разработчика — это тщательно подобранный список ресурсов, инструментов и практик, охватывающих весь жизненный цикл современного веб-приложения.
Проект ориентирован на фронтенд, но также затрагивает аспекты бэкенда, DevOps, производительности, безопасности, тестирования, архитектуры и многое другое. Это не просто список ссылок — это настоящая карта знаний по веб-разработке.
📚 Темы включают:
- Среды разработки (IDE, терминал, Git)
- Языки и трансляторы (JS/TS, Babel, WebAssembly)
- UI/UX, CSS-инструменты и фреймворки
- Сборщики и бандлеры (Webpack, Vite, etc.)
- CI/CD, мониторинг, деплоймент
- Архитектурные шаблоны, микросервисы, серверлесс
- Безопасность, производительность, тестирование
https://github.com/dexteryy/spellbook-of-modern-webdev
👉 @frontend_1
🧙♂️ Книга заклинаний современного веб-разработчика — это тщательно подобранный список ресурсов, инструментов и практик, охватывающих весь жизненный цикл современного веб-приложения.
Проект ориентирован на фронтенд, но также затрагивает аспекты бэкенда, DevOps, производительности, безопасности, тестирования, архитектуры и многое другое. Это не просто список ссылок — это настоящая карта знаний по веб-разработке.
📚 Темы включают:
- Среды разработки (IDE, терминал, Git)
- Языки и трансляторы (JS/TS, Babel, WebAssembly)
- UI/UX, CSS-инструменты и фреймворки
- Сборщики и бандлеры (Webpack, Vite, etc.)
- CI/CD, мониторинг, деплоймент
- Архитектурные шаблоны, микросервисы, серверлесс
- Безопасность, производительность, тестирование
https://github.com/dexteryy/spellbook-of-modern-webdev
👉 @frontend_1
❤3👍2
🚀 С 25 по 29 августа пройдёт Podlodka React Crew #3 — сезон о паттернах и практиках фронтенда.
В программе:
💡 Паттерны и подводные камни View Transition API в React (Николай Шабалин, СберЗдоровье)
🧠 Глубокое погружение в архитектуру React Hooks (Максим Никитин, Rocket Science)
⚙️ Разбор FSD 2.1 на практике, без догм (Лев Челядинов, FSD Core team)
📚Подготовка к архитектурному интервью для фронтендеров (Игорь Антонов, Т-Банк)
📐Layout-паттерны за пределами Flexbox и CSS Grid (Саша Илатовский, Albato)
🎯 Все темы прикладные, с практикой и кейсами.
🔗 Подробности и билеты
P.S: Для подписчиков группы Frontend разработчик скидка 500 р по промокоду react_crew_3_iyBLiN
В программе:
💡 Паттерны и подводные камни View Transition API в React (Николай Шабалин, СберЗдоровье)
🧠 Глубокое погружение в архитектуру React Hooks (Максим Никитин, Rocket Science)
⚙️ Разбор FSD 2.1 на практике, без догм (Лев Челядинов, FSD Core team)
📚Подготовка к архитектурному интервью для фронтендеров (Игорь Антонов, Т-Банк)
📐Layout-паттерны за пределами Flexbox и CSS Grid (Саша Илатовский, Albato)
🎯 Все темы прикладные, с практикой и кейсами.
🔗 Подробности и билеты
P.S: Для подписчиков группы Frontend разработчик скидка 500 р по промокоду
👍1
Сократите свой CSS-код с помощью
Используйте псевдокласс-функцию
👉 @frontend_1
:where()
Используйте псевдокласс-функцию
:where()
, когда нужно применить одинаковые стили к нескольким элементам, не беспокоясь о том, что порядок селекторов повлияет на специфичность правил. Это простой способ сделать CSS более предсказуемым и удобным для поддержки.
/* Without :where() */
.container > h1,
.container > .card h1,
.container > .card:last-child {
border: 2px solid red;
padding: 10px;
}
/* With :where() */
.container > :where(h1, .card .h1, .card:last-child) {
border: 2px solid red;
padding: 10px;
}
👉 @frontend_1
👍9
3 полезных совета по Tailwind CSS
Tailwind CSS произвел революцию в том, как мы подходим к веб-дизайну, предложив утилитарно-ориентированный фреймворк, который позволяет быстро разрабатывать и легко настраивать интерфейсы. В этом посте мы рассмотрим три менее известных, но очень полезных совета по Tailwind CSS, которые помогут ускорить рабочий процесс и улучшить качество кода.
1. Используйте
Вместо того чтобы отдельно задавать ширину и высоту, можно использовать утилиту
Этот шорткат удобен для квадратов, кругов и любых элементов, где нужна равная ширина и высота.
2. Применяйте
Когда нужно добавить границы или разделители между дочерними элементами, вместо ручного добавления бордеров каждому ребёнку используйте утилиту
Этот подход особенно полезен для списков, меню и любых макетов, где нужно одинаковое разделение элементов.
3. Используйте произвольные варианты с
Tailwind CSS позволяет применять стили ко всем совпадающим дочерним элементам через родителя с помощью синтаксиса
Этот метод особенно полезен для единообразного применения стилей к дочерним элементам без необходимости прописывать их каждому отдельно.
👉 @frontend_1
Tailwind CSS произвел революцию в том, как мы подходим к веб-дизайну, предложив утилитарно-ориентированный фреймворк, который позволяет быстро разрабатывать и легко настраивать интерфейсы. В этом посте мы рассмотрим три менее известных, но очень полезных совета по Tailwind CSS, которые помогут ускорить рабочий процесс и улучшить качество кода.
1. Используйте
size-{n}
для одинаковой ширины и высотыВместо того чтобы отдельно задавать ширину и высоту, можно использовать утилиту
size-{n}
, если элементу нужны одинаковые размеры.
<!-- Вместо этого -->
<div class="w-12 h-12 bg-blue-500 rounded-full"></div>
<!-- Используйте это -->
<div class="size-12 bg-blue-500 rounded-full"></div>
Этот шорткат удобен для квадратов, кругов и любых элементов, где нужна равная ширина и высота.
2. Применяйте
divide-{y/x}-{n}
для равномерного разделенияКогда нужно добавить границы или разделители между дочерними элементами, вместо ручного добавления бордеров каждому ребёнку используйте утилиту
divide-{y/x}-{n}
на родительском контейнере. Это гарантирует единообразное разделение и уменьшает количество кода.
<!-- Вместо этого -->
<div>
<div class="py-4 border-b">Item 1</div>
<div class="py-4 border-b">Item 2</div>
<div class="py-4">Item 3</div>
</div>
<!-- Используйте это -->
<div class="divide-y">
<div class="py-4">Item 1</div>
<div class="py-4">Item 2</div>
<div class="py-4">Item 3</div>
</div>
Этот подход особенно полезен для списков, меню и любых макетов, где нужно одинаковое разделение элементов.
3. Используйте произвольные варианты с
[&_selector]:
Tailwind CSS позволяет применять стили ко всем совпадающим дочерним элементам через родителя с помощью синтаксиса
[&_selector]:
. Это делает HTML чище и удобнее в поддержке.
<!-- Вместо этого -->
<ul>
<li class="mb-2 text-blue-500">Item 1</li>
<li class="mb-2 text-blue-500">Item 2</li>
<li class="mb-2 text-blue-500">Item 3</li>
</ul>
<!-- Используйте это -->
<ul class="[&_li]:mb-2 [&_li]:text-blue-500">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
Этот метод особенно полезен для единообразного применения стилей к дочерним элементам без необходимости прописывать их каждому отдельно.
👉 @frontend_1
👍8❤🔥1💩1
Как добавлять условные свойства объектов в JavaScript
При создании объектов в JavaScript иногда требуется включать определённые свойства только при выполнении конкретных условий. Этот приём можно реализовать с помощью оператора расширения (…) в сочетании с условной логикой. Давайте разберём, как овладеть этим мощным инструментом для более гибкого и динамичного создания объектов.
Проблема статических свойств объектов
Представьте: вы создаёте объект пользователя и хотите добавить разные свойства в зависимости от его статуса. Возможно, он администратор, или у него есть премиум-подписка, или и то, и другое! Как создать объект, который гибко включает или исключает свойства в зависимости от условий?
Решение: условное распространение (Conditional Spreading) в JavaScript
Вот где начинается магия. Мы можем использовать оператор расширения (
Разберём это на примере:
Как работают условные свойства объектов
Выражение
Если первая часть выражения ложна (falsy), то происходит короткое замыкание — вся конструкция возвращает это ложное значение, а вторая часть даже не вычисляется.
Вот что происходит в нашем примере:
-
-
-
Профессиональные советы по работе с условными свойствами объектов в JavaScript 🚀
1- Порядок имеет значение: помните, что порядок операций распространения (spread) может влиять на итоговый объект. Более поздние операции перезапишут более ранние при одинаковом ключе.
2- Вопросы производительности: хотя этот приём выглядит чисто и читаемо, будьте осторожны при использовании с большими объектами или в критичных к производительности местах. Каждая операция
3- Отладка условных свойств: при отладке помните, что "ложные" значения (
4- Nullish coalescing: для более продвинутых случаев использования рассмотрите комбинацию этого подхода с оператором объединения с null (??) для задания значений по умолчанию.
Этот приём позволяет создавать объекты чисто и гибко, добавляя свойства динамически на основе различных условий. Он особенно полезен при работе со сложными объектами, которые должны адаптироваться к разным сценариям или типам пользователей.
👉 @frontend_1
При создании объектов в JavaScript иногда требуется включать определённые свойства только при выполнении конкретных условий. Этот приём можно реализовать с помощью оператора расширения (…) в сочетании с условной логикой. Давайте разберём, как овладеть этим мощным инструментом для более гибкого и динамичного создания объектов.
Проблема статических свойств объектов
Представьте: вы создаёте объект пользователя и хотите добавить разные свойства в зависимости от его статуса. Возможно, он администратор, или у него есть премиум-подписка, или и то, и другое! Как создать объект, который гибко включает или исключает свойства в зависимости от условий?
Решение: условное распространение (Conditional Spreading) в JavaScript
Вот где начинается магия. Мы можем использовать оператор расширения (
…
) вместе с логическим оператором И (&&
), чтобы условно добавлять свойства в объекты JavaScript. Такой подход позволяет создавать чистый и гибкий код, динамически добавляя свойства на основании различных условий.Разберём это на примере:
const isAdmin = true;
const hasPremium = false;
const user = {
username: 'johndoe',
email: '[email protected]',
...(isAdmin && { role: 'admin' }),
...(hasPremium && { subscription: 'premium' }),
...((isAdmin || hasPremium) && { specialFeatures:
['dashboard', 'reports'] }),
};
console.log(user);
/*
{
"username": "johndoe",
"email": "[email protected]",
"role": "admin",
"specialFeatures": [
"dashboard",
"reports"
]
}
*/
Как работают условные свойства объектов
Выражение
&&
в JavaScript вычисляется слева направо.Если первая часть выражения ложна (falsy), то происходит короткое замыкание — вся конструкция возвращает это ложное значение, а вторая часть даже не вычисляется.
Вот что происходит в нашем примере:
-
`isAdmin && {
role: 'admin' }`
: так как isAdmin === true
, в объект добавляется свойство role: 'admin'
.-
`hasPremium &&
{ subscription: 'premium'
}`
: так как hasPremium === false
, это свойство не добавляется.-
`(isAdmin || hasPremium) && { specialFeatures: [...] }`
: условие истинно (потому что isAdmin === true`), поэтому в объект добавляется массив `specialFeatures
.Профессиональные советы по работе с условными свойствами объектов в JavaScript 🚀
1- Порядок имеет значение: помните, что порядок операций распространения (spread) может влиять на итоговый объект. Более поздние операции перезапишут более ранние при одинаковом ключе.
2- Вопросы производительности: хотя этот приём выглядит чисто и читаемо, будьте осторожны при использовании с большими объектами или в критичных к производительности местах. Каждая операция
spread
создаёт новый объект, что может повлиять на производительность при чрезмерном использовании.3- Отладка условных свойств: при отладке помните, что "ложные" значения (
`...false`
, ...null
, `...undefined`
) просто игнорируются, из-за чего некоторые проблемы могут быть неочевидны на первый взгляд.4- Nullish coalescing: для более продвинутых случаев использования рассмотрите комбинацию этого подхода с оператором объединения с null (??) для задания значений по умолчанию.
const user = {
...someCondition && { prop: valueIfTrue ?? defaultValue }
};
Этот приём позволяет создавать объекты чисто и гибко, добавляя свойства динамически на основе различных условий. Он особенно полезен при работе со сложными объектами, которые должны адаптироваться к разным сценариям или типам пользователей.
👉 @frontend_1
👍4👎4