В JavaScript можно превратить HTML-элемент в скриншот
Вот минималистичный пример, как сохранить HTML-элемент как PNG с помощью библиотеки
Создаётся <a>-элемент со ссылкой на изображение.
Устанавливается имя файла и запускается автоклик, чтобы браузер начал скачивание
@WebDev_Plus
Вот минималистичный пример, как сохранить HTML-элемент как PNG с помощью библиотеки
modern-screenshotdomToPng(HTML_ELEMENT) — превращает DOM-элемент в PNG-картинку в формате data URL.Создаётся <a>-элемент со ссылкой на изображение.
Устанавливается имя файла и запускается автоклик, чтобы браузер начал скачивание
@WebDev_Plus
❤5🔥4❤🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Прокачайся в веб-разработке с курсами от команды Chrome. Бесплатно, по темам, интерактивно
Что внутри: HTML, CSS, JS, доступность, тестирование и ещё куча всего полезного. Можно идти по порядку, а можно сразу нырнуть в то, что интересует больше всего
Забираем здесь😎
@WebDev_Plus
Что внутри: HTML, CSS, JS, доступность, тестирование и ещё куча всего полезного. Можно идти по порядку, а можно сразу нырнуть в то, что интересует больше всего
Забираем здесь
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Эффектная коллекция анимированных компонентов.
Более 100 штук в наличии. Открытый исходный код и бесплатно:
👉 https://github.com/kokonut-labs/kokonutui
@WebDev_Plus
Более 100 штук в наличии. Открытый исходный код и бесплатно:
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
This media is not supported in your browser
VIEW IN TELEGRAM
Создавай впечатляющие изображения своего веб-сайта или приложения
Просто перетащи скриншот и наблюдай за магией:
→ shots․so
@WebDev_Plus
Просто перетащи скриншот и наблюдай за магией:
→ shots․so
@WebDev_Plus
❤5👍3
This media is not supported in your browser
VIEW IN TELEGRAM
На твоём сайте может быть эта проблема:
Если плохой контраст — никто ничего не читает.
Используй этот трюк в DevTools и срочно поправь цвета
@WebDev_Plus
Если плохой контраст — никто ничего не читает.
Используй этот трюк в DevTools и срочно поправь цвета
@WebDev_Plus
❤11🔥3
CSS-функции скоро станут доступны, и самое время немного запутать JavaScript-разработчиков (а может, и бэкендеров).
Нет, это не те же функции, что в JS. Как и в случае со свойствами CSS, порядок внутри не имеет значения — всё можно писать в обратном порядке.
Вы можете попробовать это в последней версии Chrome, включив флаг "Experimental Web Platform features": https://codepen.io/t_afif/pen/MYwMaYE😨
@WebDev_Plus
Нет, это не те же функции, что в JS. Как и в случае со свойствами CSS, порядок внутри не имеет значения — всё можно писать в обратном порядке.
Вы можете попробовать это в последней версии Chrome, включив флаг "Experimental Web Platform features": https://codepen.io/t_afif/pen/MYwMaYE
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Хочешь изучить алгоритмы и структуры данных на JavaScript? Этот репозиторий — то, что нужно. С пояснениями и примерами, многие из которых на русском.
https://github.com/trekhleb/javascript-algorithms/blob/master/README.ru-RU.md🤔
@WebDev_Plus
https://github.com/trekhleb/javascript-algorithms/blob/master/README.ru-RU.md
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
Можешь больше не использовать
Теперь можно читать и записывать куки через CookieStore API.
🔸 Основана на Promise
🔸 Современный синтаксис
🔸 Уже была в Chrome
🔸 Только что появилась в Safari и Firefox
@WebDev_Plus
document.cookieТеперь можно читать и записывать куки через CookieStore API.
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Мощное SEO-расширение для веб-разработчиков
Находит ошибки на странице, выявляет битые ссылки и подсказывает, что можно улучшить
https://www.metaexplorer.co/
@WebDev_Plus
Находит ошибки на странице, выявляет битые ссылки и подсказывает, что можно улучшить
https://www.metaexplorer.co/
@WebDev_Plus
👍3
CSS Box Shadow и Drop Shadow
🔹 box-shadow — добавляет тень к прямоугольной рамке элемента (включая фон и границы).
🔹 drop-shadow — работает как фильтр, отбрасывает тень по форме самого элемента (полезно для PNG с прозрачностью).
@WebDev_Plus
box-shadow → тень по коробкеdrop-shadow → тень по содержимому@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🎉3
This media is not supported in your browser
VIEW IN TELEGRAM
Чувак, это просто чума
4000+ 3D-иконок, сгенерированных ИИ — идеально для веба, фронта, UI, презентаций инвесторам, чего угодно.
Каждая иконка выглядит так, будто её рисовал дизайнер из YC
Вот линк, проверь сам: thiings.co🥺
@WebDev_Plus
4000+ 3D-иконок, сгенерированных ИИ — идеально для веба, фронта, UI, презентаций инвесторам, чего угодно.
Каждая иконка выглядит так, будто её рисовал дизайнер из YC
Вот линк, проверь сам: thiings.co
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5
Наконец-то JavaScript начинает вести себя как взрослый язык.
Вот набор новых методов для Set, которые должны были быть добавлены лет 15 назад, но ладно хотя бы сейчас. Поддержка уже есть в 87% браузеров, так что можно юзать без костылей.
🔹
Получить пересечение — то, что есть и в FrontEnd, и в BackEnd.
🔹
Объединение без дубликатов.
🔹
Разность: всё, что есть в FrontEnd, но нет в BackEnd.
🔹
Симметричная разность: всё, что есть только в одном из двух.
🔹
Проверка: все ли элементы FrontEnd есть в BackEnd?
🔹
Проверка: содержит ли FrontEnd все элементы BackEnd?
🔹
Есть ли вообще общие элементы?
Use them.
@WebDev_Plus
Вот набор новых методов для Set, которые должны были быть добавлены лет 15 назад, но ладно хотя бы сейчас. Поддержка уже есть в 87% браузеров, так что можно юзать без костылей.
const frontEnd = new Set(['JavaScript', 'HTML', 'CSS'])
const backEnd = new Set(['JavaScript', 'Python', 'Go', 'Java'])
.intersection(otherSet)Получить пересечение — то, что есть и в FrontEnd, и в BackEnd.
frontEnd.intersection(backEnd) → ['JavaScript'].union(otherSet)Объединение без дубликатов.
frontEnd.union(backEnd) → ['JavaScript', 'HTML', 'CSS', 'Python', 'Go', 'Java'].difference(otherSet)Разность: всё, что есть в FrontEnd, но нет в BackEnd.
frontEnd.difference(backEnd) → ['HTML', 'CSS'].symmetricDifference(otherSet)Симметричная разность: всё, что есть только в одном из двух.
frontEnd.symmetricDifference(backEnd) → ['HTML', 'CSS', 'Python', 'Go', 'Java'].isSubsetOf(otherSet)Проверка: все ли элементы FrontEnd есть в BackEnd?
frontEnd.isSubsetOf(backEnd) → false .isSupersetOf(otherSet)Проверка: содержит ли FrontEnd все элементы BackEnd?
frontEnd.isSupersetOf(backEnd) → false.isDisjointFrom(otherSet)Есть ли вообще общие элементы?
frontEnd.isDisjointFrom(backEnd) → falseArray.from(set).filter(...), уже в прошлом. Это не 2008. Эти методы читаются лучше, работают быстрее и наконец-то делают Set тем, чем он должен быть: множество, а не декоративная коллекция для новичков.Use them.
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14
This media is not supported in your browser
VIEW IN TELEGRAM
Наткнулся на крутую коллекцию фоновых паттернов для современных сайтов.
Можно скопировать одним кликом — прям идеально для лендингов, hero-блоков или даже в качестве background у компонентов.
Полезная штука, чтобы быстро прокачать визуал без лишней возни.
→ http://patterncraft.fun
@WebDev_Plus
Можно скопировать одним кликом — прям идеально для лендингов, hero-блоков или даже в качестве background у компонентов.
Полезная штука, чтобы быстро прокачать визуал без лишней возни.
→ http://patterncraft.fun
@WebDev_Plus
👍10❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Лучшие графики для твоего веба или приложения
Lightweight Charts реально выделяются:
✓ Поддержка React, Vue и Web Components
✓ Адаптивны и отлично работают на мобилках
✓ Построены на JavaScript и canvas
✓ Оптимизированы для больших объёмов данных
Идеально, если нужно что-то лёгкое, но мощное.
→ https://tradingview.com/lightweight-charts
@WebDev_Plus
Lightweight Charts реально выделяются:
✓ Поддержка React, Vue и Web Components
✓ Адаптивны и отлично работают на мобилках
✓ Построены на JavaScript и canvas
✓ Оптимизированы для больших объёмов данных
Идеально, если нужно что-то лёгкое, но мощное.
→ https://tradingview.com/lightweight-charts
@WebDev_Plus
❤2
CSS-совет
Сделал фигуру с помощью
Пара строк кода и у тебя есть как основная форма, так и её вырезанная (обратная) версия. Бонусом ты также можешь управлять отступами вокруг инвертированной формы.
@WebDev_Plus
Сделал фигуру с помощью
shape() и хочешь инвертировать её? ЛегкоПара строк кода и у тебя есть как основная форма, так и её вырезанная (обратная) версия. Бонусом ты также можешь управлять отступами вокруг инвертированной формы.
@WebDev_Plus
❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Это, пожалуй, одно из самых безумных расширений для редактора, что я видел за последнее время.
GitLantis превращает структуру проекта в 3D-модель подводного мира.
Да-да, вы «ныряете» сквозь директории среди буйков и маяков
Не спрашивайте зачем. Просто попробуйте.
@WebDev_Plus
GitLantis превращает структуру проекта в 3D-модель подводного мира.
Да-да, вы «ныряете» сквозь директории среди буйков и маяков
Не спрашивайте зачем. Просто попробуйте.
@WebDev_Plus
❤12😁4
This media is not supported in your browser
VIEW IN TELEGRAM
Это must-have инструмент для каждого веб-разработчика
Он позволяет конвертировать любой URL в разные форматы Markdown, PDF, текст, изображения и другие — всего в пару кликов.
https://www.urltoany.com/
@WebDev_Plus
Он позволяет конвертировать любой URL в разные форматы Markdown, PDF, текст, изображения и другие — всего в пару кликов.
https://www.urltoany.com/
@WebDev_Plus
👍5❤🔥4
С помощью CSS можно использовать новую функцию
Результаты этих функций можно использовать и в псевдоэлементах.
Функции довольно громоздкие, поэтому можно определить кастомные функции и сократить код.
@WebDev_Plus
sibling-index(), чтобы определить позицию элемента среди его соседей. Также доступна функция sibling-count(), которая возвращает общее количество соседних элементов.Результаты этих функций можно использовать и в псевдоэлементах.
<div class="container">
<div></div>
<div></div>
<div></div>
...
</div>
.container div {
border: calc(sibling-index() * 2px) solid;
opacity: calc(sibling-index() / sibling-count());
}
.container div::before {
content: counter(i) "/" counter(N);
counter-reset: N sibling-count() i sibling-index(); /* работают с текущим div */
}Функции довольно громоздкие, поэтому можно определить кастомные функции и сократить код.
@function --N() {
result: sibling-count();
}
@function --i() {
result: calc(sibling-index() - 1); /* начинаем с нуля, а не с единицы */
}.container div {
border: calc(--i() * 2px) solid;
opacity: calc(--i() / --N());
}
.container div::before {
content: counter(i) "/" counter(N);
counter-reset: N --N() i --i();
}@WebDev_Plus
❤4