This media is not supported in your browser
VIEW IN TELEGRAM
Как одной строкой задать и
Обычно это пишут так:
Но то же самое можно записать короче:
Функция
Приятный бонус: значения в
@WebDev_Plus
min-width, и widthОбычно это пишут так:
.box {
width: 100%;
min-width: 400px;
}Но то же самое можно записать короче:
.box {
width: max(400px, 100%);
}Функция
max() берёт большее значение из списка. Если ширина экрана меньше 400px — блок всё равно будет минимум 400px. Если ширина больше — тянется на 100%.Приятный бонус: значения в
max() можно указывать в любом порядке.@WebDev_Plus
❤3
This media is not supported in your browser
VIEW IN TELEGRAM
HTML получил новые атрибуты command, которые позволяют вызывать методы DOM-элементов без написания JavaScript.
Функция уже доступна в Chrome и Edge, а в ближайшее время появится и в Firefox и Safari. Теперь для открытия или закрытия модалки достаточно двух строк HTML.🤗
@WebDev_Plus
Функция уже доступна в Chrome и Edge, а в ближайшее время появится и в Firefox и Safari. Теперь для открытия или закрытия модалки достаточно двух строк HTML.
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
Indexing
Индексы нужны, чтобы ускорить выборку данных. Вместо полного сканирования таблицы база обращается к индексу, который работает как оглавление в книге.
Пример: если создать индекс на поле
Существуют разные виды индексов. Индекс может быть по одному столбцу или составным по нескольким. Уникальный индекс гарантирует отсутствие дубликатов, а полнотекстовый индекс используется для быстрого поиска по текстам.
Главное преимущество индексов — заметное ускорение запросов, сортировок и фильтрации. Минусы заключаются в том, что индексы занимают дополнительное место и замедляют операции записи, такие как вставка, обновление и удаление.
Joins
Join это способ объединить строки из разных таблиц по связанному полю.
INNER JOIN возвращает только совпадающие строки, LEFT JOIN оставляет все строки из левой таблицы и добавляет совпадения из правой, RIGHT JOIN делает то же самое, но наоборот, FULL OUTER JOIN объединяет всё при наличии совпадений, а CROSS JOIN выдаёт декартово произведение.
Пример запроса:
Transactions
Транзакция это набор операций, который выполняется как единое целое. Если один шаг не проходит, база данных откатывает всё назад, сохраняя целостность.
Классические свойства транзакций известны как ACID. Atomicity означает «всё или ничего». Consistency гарантирует, что база остаётся в валидном состоянии. Isolation даёт уверенность, что параллельные транзакции не мешают друг другу. Durability гарантирует, что закоммиченные изменения сохраняются навсегда.
Пример транзакции для перевода денег:
В реальных системах индексы ускоряют поиск товаров по названию в интернет-магазине. Join позволяет объединить клиентов с их заказами в одной выборке. Транзакции обеспечивают корректность при переводе денег между счетами.
@WebDev_Plus
Индексы нужны, чтобы ускорить выборку данных. Вместо полного сканирования таблицы база обращается к индексу, который работает как оглавление в книге.
Пример: если создать индекс на поле
email, то поиск пользователя по почте выполняется гораздо быстрее. Существуют разные виды индексов. Индекс может быть по одному столбцу или составным по нескольким. Уникальный индекс гарантирует отсутствие дубликатов, а полнотекстовый индекс используется для быстрого поиска по текстам.
Главное преимущество индексов — заметное ускорение запросов, сортировок и фильтрации. Минусы заключаются в том, что индексы занимают дополнительное место и замедляют операции записи, такие как вставка, обновление и удаление.
Joins
Join это способ объединить строки из разных таблиц по связанному полю.
INNER JOIN возвращает только совпадающие строки, LEFT JOIN оставляет все строки из левой таблицы и добавляет совпадения из правой, RIGHT JOIN делает то же самое, но наоборот, FULL OUTER JOIN объединяет всё при наличии совпадений, а CROSS JOIN выдаёт декартово произведение.
Пример запроса:
SELECT users.name, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id;
Transactions
Транзакция это набор операций, который выполняется как единое целое. Если один шаг не проходит, база данных откатывает всё назад, сохраняя целостность.
Классические свойства транзакций известны как ACID. Atomicity означает «всё или ничего». Consistency гарантирует, что база остаётся в валидном состоянии. Isolation даёт уверенность, что параллельные транзакции не мешают друг другу. Durability гарантирует, что закоммиченные изменения сохраняются навсегда.
Пример транзакции для перевода денег:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
В реальных системах индексы ускоряют поиск товаров по названию в интернет-магазине. Join позволяет объединить клиентов с их заказами в одной выборке. Транзакции обеспечивают корректность при переводе денег между счетами.
@WebDev_Plus
❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Вышла версия 1.5 популярного React-компонента для карт
Теперь разработчики могут работать с 3D-картами, использовать SSR, строить маршруты между двумя точками и рисовать собственные геометрические фигуры прямо на карте.
Проект продолжает активно развиваться и становится ещё удобнее для интеграции в современные веб-приложения.
Подробнее: react-google-maps1.5
@WebDev_Plus
Теперь разработчики могут работать с 3D-картами, использовать SSR, строить маршруты между двумя точками и рисовать собственные геометрические фигуры прямо на карте.
Проект продолжает активно развиваться и становится ещё удобнее для интеграции в современные веб-приложения.
Подробнее: react-google-maps1.5
@WebDev_Plus
❤3
Занес классную находку для тех, кто учит JS и любит MMORPG. Deepest World — браузерная песочница, где ты пишешь бота на JavaScript, а он уже сам фармит, крафтит и чистит данжи. Игра в раннем доступе и бесплатна. 🤩
Поиграть: https://deepestworld.com/
@WebDev_Plus
Поиграть: https://deepestworld.com/
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
freeCodeCamp выкатил ежедневные задачи по программированию. Решать их можно прямо в мобильном приложении или в
Это отличный способ прокачать навыки: можно тренироваться параллельно с прохождением курса или просто для практики на каждый день.
Сегодняшний челендж — валидатор IPv4. Попробуйте решить
Подробнее тут
@WebDev_Plus
/learnЭто отличный способ прокачать навыки: можно тренироваться параллельно с прохождением курса или просто для практики на каждый день.
Сегодняшний челендж — валидатор IPv4. Попробуйте решить
Подробнее тут
@WebDev_Plus
❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Подогнал классную находку для веб-разработчиков
Cursor Effects — набор ретро-эффектов курсора с кучей вариаций. Бесплатно, open source, и встраивается в проект буквально за пару строк кода.
Мгновенно добавляет сайту креатива и выделяет его среди остальных :)
github.com/tholman/cursor-effects
@WebDev_Plus
Cursor Effects — набор ретро-эффектов курсора с кучей вариаций. Бесплатно, open source, и встраивается в проект буквально за пару строк кода.
Мгновенно добавляет сайту креатива и выделяет его среди остальных :)
github.com/tholman/cursor-effects
@WebDev_Plus
❤5
Сохраняй себе 5 топовых тулз для веб-разработчиков
Эти штуки реально ускоряют работу, делают код чище и экономят время. Полезный набор, который стоит держать под рукой.
SVG Flag Icons — nucleoapp.com/svg-flag-icons
EmbedPDF — embedpdf.com
FliiipBook — fliiipbook.com
use-mcp — github.com/modelcontextprotocol/use-mcp
DayPicker — daypicker.dev
Пригодятся в любом проекте
@WebDev_Plus
Эти штуки реально ускоряют работу, делают код чище и экономят время. Полезный набор, который стоит держать под рукой.
SVG Flag Icons — nucleoapp.com/svg-flag-icons
EmbedPDF — embedpdf.com
FliiipBook — fliiipbook.com
use-mcp — github.com/modelcontextprotocol/use-mcp
DayPicker — daypicker.dev
Пригодятся в любом проекте
@WebDev_Plus
👍5❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Большинство разработчиков об этом даже не догадываются… любую веб-страницу можно превратить в текстовый редактор одной строкой JavaScript
Просто вбей в консоль браузера:
И сразу получаешь страницу, где весь контент можно редактировать. Можно включать и выключать этот режим в любой момент, работает во всех популярных браузерах — Chrome, Firefox, Safari, Edge.
Удобно для быстрых мокапов, теста идей по UI или просто чтобы поиграться.
Напоминание: некоторые из самых мощных фич в технике годами лежат прямо на поверхности🙂
@WebDev_Plus
Просто вбей в консоль браузера:
document.designMode = "on";
И сразу получаешь страницу, где весь контент можно редактировать. Можно включать и выключать этот режим в любой момент, работает во всех популярных браузерах — Chrome, Firefox, Safari, Edge.
Удобно для быстрых мокапов, теста идей по UI или просто чтобы поиграться.
Напоминание: некоторые из самых мощных фич в технике годами лежат прямо на поверхности
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4❤3👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь выучить React, Svelte, Vue или Angular?
Вот страница, где сравнивается синтаксис всех четырёх фреймворков. Если уже знаешь один, то легко разберёшься в другом:
→ http://component-party.pages.dev
@WebDev_Plus
Вот страница, где сравнивается синтаксис всех четырёх фреймворков. Если уже знаешь один, то легко разберёшься в другом:
→ http://component-party.pages.dev
@WebDev_Plus
👍4
ml5.js — это библиотека машинного обучения для JavaScript, которая даёт доступ к ML-моделям прямо в браузере. С её помощью можно не только использовать готовые модели, но и обучать нейросети локально.
В этом курсе ты узнаешь, как работать с ml5.js, и закрепишь навыки на практике, собирая реальные проекты
@WebDev_Plus
В этом курсе ты узнаешь, как работать с ml5.js, и закрепишь навыки на практике, собирая реальные проекты
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь создавать лучшие анимации для своего сайта или приложения? Вот 12 принципов, которым нужно следовать:
① Эластичность: деформация для передачи веса и гибкости
② Антиципация: подготовка пользователя перед действием
③ Сцена: привлечение внимания к важному
④ Действие: покадровая анимация или ключевые позы
⑤ Непрерывность: ничего не останавливается и не начинается резко
⑥ Плавность: плавные входы и выходы
⑦ Арки: плавные движения для большего реализма
⑧ Контекст: детали, поддерживающие основное действие
⑨ Время: правильная продолжительность для плавности или скованности
⑩ Преувеличение: акценты для лучшего донесения идеи
⑪ Объем: добавление согласованности, глубины и реализма
⑫ Привлекательность: приятные, запоминающиеся анимации с характером
Вот полная статья с примерами: 12 принципов анимации
@WebDev_Plus
① Эластичность: деформация для передачи веса и гибкости
② Антиципация: подготовка пользователя перед действием
③ Сцена: привлечение внимания к важному
④ Действие: покадровая анимация или ключевые позы
⑤ Непрерывность: ничего не останавливается и не начинается резко
⑥ Плавность: плавные входы и выходы
⑦ Арки: плавные движения для большего реализма
⑧ Контекст: детали, поддерживающие основное действие
⑨ Время: правильная продолжительность для плавности или скованности
⑩ Преувеличение: акценты для лучшего донесения идеи
⑪ Объем: добавление согласованности, глубины и реализма
⑫ Привлекательность: приятные, запоминающиеся анимации с характером
Вот полная статья с примерами: 12 принципов анимации
@WebDev_Plus
❤7🔥3👍2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Animate UI только что выпустила свою версию 1.0
✓ React, TypeScript, Tailwind CSS и Motion
✓ Полностью настраиваемая
✓ 170 анимированных иконок
Открытый исходный код: https://github.com/imskyleen/animate-ui
@WebDev_Plus
✓ React, TypeScript, Tailwind CSS и Motion
✓ Полностью настраиваемая
✓ 170 анимированных иконок
Открытый исходный код: https://github.com/imskyleen/animate-ui
@WebDev_Plus
👍4🔥3❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Чувак создал супер-производительный CSV-редактор, полностью на HTML canvas
Инструмент масштабируется под гигабайты данных и работает, как Excel. Мгновенно обрабатывает огромные файлы с максимальной производительностью.🎉
@WebDev_Plus
Инструмент масштабируется под гигабайты данных и работает, как Excel. Мгновенно обрабатывает огромные файлы с максимальной производительностью.
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🍌1
Эргономика мобильных интерфейсов
Важные кнопки, меню и CTA стоит располагать в «зелёной зоне», а верх лучше оставлять для второстепенных элементов.
@WebDev_Plus
Важные кнопки, меню и CTA стоит располагать в «зелёной зоне», а верх лучше оставлять для второстепенных элементов.
@WebDev_Plus
👌9❤2👍1
Как отцентрировать элемент с абсолютным позиционированием?
Использовать
В современном CSS можно просто использовать
@WebDev_Plus
Использовать
auto-margin вместе с width/height?top/left в комбинации с translate?В современном CSS можно просто использовать
place-self: center@WebDev_Plus
👍7
Как работает DNS?
Если вы веб-разработчик или DevOps-инженер, важно понимать, что происходит, когда вы вводите в браузере
Первое, что нужно сделать, — это перевести текстовый домен в машинный числовой IP-адрес. Этим занимается DNS-сервер, который работает как телефонная книга в интернете.
Под капотом участвуют четыре типа серверов: recursive resolver, root name server, TLD name server и authoritative name server.
1. DNS Resolver
Когда вы вводите
2. Root Name Server
DNS Resolver обращается к Root-серверам (их 13), которыми управляют разные организации и делегированы ICANN. Они обрабатывают запросы для TLD (доменных зон верхнего уровня).
Если Root-сервер не находит запись в своих зонах, он указывает на сервер имен для нужного TLD, например .com.
3. TLD Server
Далее DNS Resolver опрашивает TLD-сервер, который возвращает IP авторитетного сервера домена.
4. Authoritative Name Server
После запроса к авторитетному серверу домена тот возвращает IP адрес исходного сервера. На финальном этапе DNS Resolver передаёт этот IP клиенту, и браузер использует его, чтобы загрузить страницу.
Кэширование
Чтобы ускорить загрузку, DNS-записи могут храниться в кэше на разных уровнях:
- браузер,
- ОС,
- роутер,
- провайдер.
Если IP есть в кэше, поиск через DNS Resolver не выполняется, что экономит время.
Подробнее: Что происходит, когда вы вводите URL
@WebDev_Plus
Если вы веб-разработчик или DevOps-инженер, важно понимать, что происходит, когда вы вводите в браузере
https://website.com и нажимаете Enter.Первое, что нужно сделать, — это перевести текстовый домен в машинный числовой IP-адрес. Этим занимается DNS-сервер, который работает как телефонная книга в интернете.
Под капотом участвуют четыре типа серверов: recursive resolver, root name server, TLD name server и authoritative name server.
1. DNS Resolver
Когда вы вводите
https://website.com, запрос сначала отправляется на DNS Resolver. Этот сервер общается с другими DNS-серверами, чтобы найти нужный IP-адрес.2. Root Name Server
DNS Resolver обращается к Root-серверам (их 13), которыми управляют разные организации и делегированы ICANN. Они обрабатывают запросы для TLD (доменных зон верхнего уровня).
Если Root-сервер не находит запись в своих зонах, он указывает на сервер имен для нужного TLD, например .com.
3. TLD Server
Далее DNS Resolver опрашивает TLD-сервер, который возвращает IP авторитетного сервера домена.
4. Authoritative Name Server
После запроса к авторитетному серверу домена тот возвращает IP адрес исходного сервера. На финальном этапе DNS Resolver передаёт этот IP клиенту, и браузер использует его, чтобы загрузить страницу.
Кэширование
Чтобы ускорить загрузку, DNS-записи могут храниться в кэше на разных уровнях:
- браузер,
- ОС,
- роутер,
- провайдер.
Если IP есть в кэше, поиск через DNS Resolver не выполняется, что экономит время.
Подробнее: Что происходит, когда вы вводите URL
@WebDev_Plus
❤1
Шпаргалка по самым важным методам объекта в JS
👉 Гайды по JavaScript
// Получает собственные ключи объекта
Object.keys({ a: 1, b: 2 })
// → ["a", "b"]
// Получает значения свойств объекта
Object.values({ a: 1, b: 2 })
// → [1, 2]
// Преобразует объект в массив пар [ключ, значение]
Object.entries({ a: 1, b: 2 })
// → [["a", 1], ["b", 2]]
// Преобразует пары [ключ, значение] обратно в объект
Object.fromEntries([["a", 1], ["b", 2]])
// → { a: 1, b: 2 }
// Копирует свойства одного или нескольких объектов
Object.assign({}, { a: 1 }, { b: 2 })
// → { a: 1, b: 2 }
// Замораживает объект (изменения запрещены)
const obj = { a: 1 }
Object.freeze(obj)
obj.a = 2
// → { a: 1 }
// Запечатывает объект (нельзя добавлять или удалять свойства)
const user = { name: "Ana" }
Object.seal(user)
delete user.name // игнорируется
user.age = 30 // игнорируется
// user → { name: "Ana" }
// Проверяет, является ли свойство собственным (не унаследованным)
Object.hasOwn({ a: 1 }, "a")
// → true
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Разработчики тратят на чтение кода больше времени, чем на его написание
Вот лайфхак:
I. Открой любой репозиторий
II. Замени .com на .dev в URL
III. Просматривай код прямо в VS Code
Кодь с удовольствием😁
@WebDev_Plus
Вот лайфхак:
I. Открой любой репозиторий
II. Замени .com на .dev в URL
III. Просматривай код прямо в VS Code
Кодь с удовольствием
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11
This media is not supported in your browser
VIEW IN TELEGRAM
Некоторые React-разработчики думают, что для использования тултипов нужно ставить библиотеку через npm install. Это не так
Для иконок-кнопок можно просто использовать комбинацию атрибута title и текста для скринридеров с классом sr-only из
tailwindcss. В итоге вы получите нативный тултип для лейбла и одновременно улучшите доступность (a11y).
Нюанс: не стоит злоупотреблять атрибутом title для элементов, у которых уже есть лейбл! Я использую его только для интерактивных элементов без лейбла (иконки-кнопки) или для элементов, где текст может обрезаться троеточием (например, ссылки в навигации).
@WebDev_Plus
Для иконок-кнопок можно просто использовать комбинацию атрибута title и текста для скринридеров с классом sr-only из
tailwindcss. В итоге вы получите нативный тултип для лейбла и одновременно улучшите доступность (a11y).
Нюанс: не стоит злоупотреблять атрибутом title для элементов, у которых уже есть лейбл! Я использую его только для интерактивных элементов без лейбла (иконки-кнопки) или для элементов, где текст может обрезаться троеточием (например, ссылки в навигации).
@WebDev_Plus
❤1👍1