TGViewer
Channel Public Channel
Вёрстка сайтов | HTML, CSS, JS

Вёрстка сайтов | HTML, CSS, JS

@free_html_lessons

👋 Привет, друг!

В этом канале я выкладываю структурированные, обучающие уроки и материалы по вёрстке сайтов и фронтенду.
Присоединяйся и начинай учиться!

Связь: @Tigran1963
Subscribers
4.5K
Photos
925
Videos
1
Links
1.4K

Showing posts older than #2845 · Back to latest

Older Posts 20 shown
Post #2844 557
Свойство accent-color

Каждый, кто хоть раз пытался сделать нативные чекбоксы (<input type="input">), радиокнопки или ползунки (<input type="range">) фирменного цвета бренда, знает эту боль. Приходилось скрывать стандартный инпут через appearance: none, верстать псевдоэлементы ::before / ::after и прописывать логику для состояний :checked и :focus.
Но в современном CSS есть потрясающее свойство – accent-color. Оно позволяет перекрасить интерактивные элементы UI буквально в одну строку!


/* Перекрасит ВСЕ нативные инпуты на сайте в ваш бренд-цвет */
root {
accent-color: #7b2cbf;
}

/* Или можно применить точечно к конкретной форме */
.custom-form {
accent-color: #ff007f;
}


Какими элементами управляет accent-color?
Чекбоксы (<input type="checkbox">)
Радиокнопки (<input type="radio">)
Ползунки (<input type="range">)
Индикаторы прогресса (<progress>)

Браузер не просто тупо заливает элемент вашим цветом. Он автоматически рассчитывает контрастность для галочки внутри чекбокса! Если ваш accent-color слишком темный, галочка станет белой, а если светлый — черной, чтобы сохранить доступность (A11y).
Да, это не заменит сложный кастомный дизайн с иконками, но для 90% стандартных проектов и админок – это идеальное решение, экономящее кучу времени и килобайты кода.

#полезности #css
  • 👍 5
Post #2843 560
Post #2841 562
Post #2838 686
Метод structuredClone() глубокое копирование объектов

В JavaScript объекты копируются по ссылке. Если вы просто напишете const user2 = user1, то изменяя свойства в user2, вы автоматически измените их и в user1.

Для создания независимой копии (поверхностной) мы часто используем спред-оператор: const user2 = { ...user1 }. Но если внутри объекта есть вложенные объекты или массивы, спред не сработает – ссылки на внутренние структуры останутся прежними.

Как мы выкручивались раньше для глубокого копирования?
Настоящий костыльный хит: JSON.parse(JSON.stringify(obj)) – медленный, ломает даты, функции и RegExp.
Подтягивали тяжелые сторонние библиотеки вроде Lodash (_.cloneDeep()).

Современное решение:
Теперь в JavaScript есть нативный метод structuredClone(), который делает глубокое копирование одной строчкой кода без всяких библиотек

const original = {
name: "Тигран",
skills: ["HTML", "CSS", "Vue"],
meta: {
role: "Frontend Developer"
}
};

// Делаем глубокую копию
const copy = structuredClone(original);

// Проверяем: меняем вложенный массив в копии
copy.skills.push("TypeScript");

console.log(original.skills); // ["HTML", "CSS", "Vue"] -> оригинал НЕ изменился!
console.log(copy.skills); // ["HTML", "CSS", "Vue", "TypeScript"]


Что умеет structuredClone()?
В отличие от трюка с JSON, он корректно копирует цикличные ссылки (когда объект ссылается сам на себя).
Отлично справляется с встроенными типами данных: Date, Set, Map, RegExp, ArrayBuffer.
Единственное ограничение: Он не умеет копировать функции или DOM-узлы (вызовет ошибку). Но для чистых данных – это абсолютный мастхэв, работающий прямо из коробки во всех браузерах и Node.js.

#js
  • ❤ 2
  • 👍 1
Post #2837 564
Защита интерфейса: Атрибуты autocomplete для безопасности

Многие верстальщики до сих пор игнорируют атрибут autocomplete в формах или, что еще хуже, просто бахают везде autocomplete="off", думая, что так безопаснее. На самом деле всё ровно наоборот.
Правильная настройка автозаполнения помогает браузерам и менеджерам паролей (вроде 1Password или встроенного в iOS/Chrome) корректно подставлять данные, защищая пользователя от фишинга и ошибок.

Вот несколько критически важных значений, которые нужно использовать:
1. Создание нового пароля vs Вход
Если пользователь регистрируется или меняет пароль, обязательно пишите new-password. Если просто входит – current-password.

<input type="password" name="pwd" autocomplete="new-password">
<input type="password" name="pwd" autocomplete="current-password">

Зачем? Браузер поймет, что в первом случае нужно сгенерировать новый сложный пароль, а во втором – достать старый из базы.

2. Одноразовые коды из СМС (one-time-code)
Если вы делаете форму подтверждения телефона:

<input type="text" name="code" autocomplete="one-time-code" inputmode="numeric">

Зачем? На мобильных устройствах (iOS/Android) при получении СМС операционная система сама предложит вставить код из сообщения прямо над клавиатурой в один тап. Пользователю не придется сворачивать сайт и копировать цифры.

3. Поля для кредитных карт
Никогда не оставляйте их просто инпутами. Используйте:
cc-number — для номера карты
cc-exp — для даты окончания действия
cc-csc – для CVV/CVC кода

#html #полезности
  • 👍 3
Post #2836 550
CSS Контейнерные запросы (@container) вместо Медиа-запросов

Все мы привыкли к медиа-запросам (@media). Они отлично работают, когда нужно перестроить всю страницу целиком под мобильный экран.
Но что делать, если один и тот же компонент (например, карточка товара) должен выглядеть по-разному в узкой боковой панели и в широкой центральной сетке?
Раньше приходилось плодить JS-логику или писать тонны костыльных CSS-классов вроде .card--sidebar, .card--grid.
Теперь всё изменилось. С помощью Container Queries компонент сам адаптируется под размеры своего родительского контейнера, а не всего экрана!

Как это работает?
Сначала мы объявляем для родительского элемента контекст контейнера с помощью свойства container-type:

.sidebar, .main-grid {
/* Говорим браузеру следить за изменением ширины (inline-size) этого блока */
container-type: inline-size;
/* (Опционально) даем контейнеру имя, чтобы обращаться именно к нему */
container-name: card-wrapper;
}

А теперь стилизуем саму карточку внутри этого контейнера:

/* По умолчанию карточка вертикальная (для узких блоков) */
.card {
display: flex;
flex-direction: column;
}
/* Если родительский контейнер становится шире 400px, делаем её горизонтальной */
@container card-wrapper (min-width: 400px) {
.card {
flex-direction: row;
gap: 20px;
}
}


В чём профит?
Вы создаете абсолютно независимый компонент. Вы можете закинуть его в шапку, подвал, сайдбар или динамический попап – он сам поймет, сколько у него места, и перестроится.

Поддержка в браузерах: уже более 90% (все современные хромиумы, Safari 16+ и Firefox 110+).

#полезности #css
  • 👍 3
  • ❤ 1
Post #2835 576
Подборка лучших постов за прошлую неделю

Лучшие статьи @free_html_lessons:
1. :where()
2. Псевдокласс :is()
3. Текстуры бумаги на чистом css + svg

Лучшие фронтенд вакансии @job_webdev:
1. Frontend разработчик Сбер
2. Frontend developer Ozon
3. HTML-верстальщик

Лучшие дизайн вакансии @job_webdesign:
1. Web-дизайнер
2. Ведущий веб-дизайнер
3. Продуктовый дизайнер

#лучшеезанеделю
Post #2834 597
Post #2828 663
Псевдокласс :is()

Псевдокласс :is() позволяет сократить код, объединяя несколько селекторов в один. Он предоставляет возможность применять один и тот же стиль к нескольким элементам, таким образом уменьшая дублирование кода и упрощая его чтение.

Синтаксис псевдокласса :is() выглядит следующим образом:
:is(selector1, selector2, ...)


В качестве аргументов в псевдокласс :is() вы можете передать несколько селекторов, разделенных запятыми. Все эти селекторы будут рассматриваться как одно условие, и стили применятся ко всем элементам, соответствующим хотя бы одному из селекторов.

Давайте рассмотрим пример использования псевдокласса :is(). Предположим, у нас есть HTML-код с несколькими кнопками, и мы хотим применить один и тот же стиль к кнопкам с классами "primary" и "secondary":

<button class="primary">Primary Button</button>
<button class="secondary">Secondary Button</button>
<button>Regular Button</button>


Мы можем использовать псевдокласс :is() для объединения селекторов и применения стиля к кнопкам с классами "primary" и "secondary":
button:is(.primary, .secondary) {
background-color: blue;
color: white;
font-weight: bold;
}

В этом примере, стиль будет применен к кнопкам с классами "primary" и "secondary", но не к кнопке без класса.

Псевдокласс :is() является мощным инструментом для оптимизации и упрощения CSS-кода. Он позволяет группировать несколько селекторов в одно условие и применять к ним общие стили. Таким образом, код становится более легким для понимания и поддержки.

#полезности | #css
  • 👍 6
Post #2827 597
Post #2826 720
Задача: Реализация алгоритма для поиска оптимального маршрута в графе

Вам предстоит разработать программу на JavaScript, которая будет находить оптимальный маршрут между двумя точками в графе. Каждая точка графа представляет собой город, а ребра между точками - дороги, с весами, представляющими стоимость перемещения между городами.

Условия:
Граф может быть представлен в виде матрицы смежности или списка смежности.
Программа должна использовать алгоритм поиска кратчайшего пути, такой как алгоритм Дейкстры или алгоритм A*.
Программа должна учитывать возможные ограничения, такие как односторонние дороги, закрытые дороги и т. д.
Пользователь должен иметь возможность указать начальную и конечную точку маршрута.

#домашка@free_html_lessons
Post #2821 703
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →