Топ CSS и JS свойств и методов, которые сделают ваш код мощнее
Веб-разработка постоянно развивается, и знание ключевых CSS и JavaScript-приёмов может значительно ускорить вашу работу и улучшить качество кода. Давайте разберём самые важные и интересные свойства и методы, которые стоит добавить в свой арсенал.
🔥 Топ-10 CSS-свойств, которые стоит знать
1. aspect-ratio
Позволяет задать соотношение сторон элемента. Очень полезно для изображений, видео и адаптивных блоков.
.box {
aspect-ratio: 16 / 9; /* Соотношение как у видео 16:9 */
}2. object-fit и object-position
Контролируют, как содержимое (например, <img>) вписывается в контейнер.
img {
object-fit: cover; /* Обрезает изображение, сохраняя пропорции */
object-position: center; /* Центрирует обрезку */
}3. scroll-snap
Создаёт "привязку" при прокрутке, как в каруселях или галереях.
.container {
scroll-snap-type: y mandatory;
}
.item {
scroll-snap-align: start;
}4. clip-path
Позволяет вырезать элементы в произвольной форме (круги, многоугольники, SVG-пути).
.shape {
clip-path: polygon(0 0, 100% 0, 100% 75%, 50% 100%, 0 75%);
}5. backdrop-filter
Размытие или цветовые эффекты для области позади элемента (как в iOS).
.modal {
backdrop-filter: blur(10px);
}6. gap (для Flexbox и Grid)
Упрощает создание отступов между элементами без margin.
.grid {
display: grid;
gap: 20px; /* Работает и в Flexbox! */
}7. text-wrap: balance
Балансирует текст, делая его более читаемым.
.heading {
text-wrap: balance;
}8. :has()
Селектор, который позволяет выбирать элементы на основе их потомков (как родительский селектор).
.card:has(img) {
border: 2px solid blue; /* Стиль, только если внутри есть img */
}9. @container (Container Queries)
Медиа-запросы, но для отдельных контейнеров, а не всего экрана!
.card {
container-type: inline-size;
}
@container (min-width: 400px) {
.card { flex-direction: row; }
}10. view-transition-api (Анимации переходов между страницами)
Позволяет делать плавные переходы между страницами (например, как в мобильных приложениях).
::view-transition-old(root),
::view-transition-new(root) {
animation: fade 0.5s ease;
}🚀 Топ-10 JavaScript-методов и API
1. IntersectionObserver
Отслеживает появление элемента в области видимости (ленивая загрузка, анимации при скролле).
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) entry.target.classList.add("animate");
});
});
observer.observe(document.querySelector(".box"));2. requestAnimationFrame
Оптимизированная анимация (лучше, чем setInterval).
function animate() {
element.style.left = `${pos++}px`;
requestAnimationFrame(animate);
}
animate();3. ResizeObserver
Следит за изменением размеров элемента.
const observer = new ResizeObserver(entries => {
console.log(entries[0].contentRect.width);
});
observer.observe(document.querySelector(".box"));4. structuredClone()
Глубокое копирование объектов (встроенная альтернатива JSON.parse(JSON.stringify())).
const obj = { a: 1, b: { c: 2 } };
const clone = structuredClone(obj);5. Promise.allSettled()
Ждёт завершения всех промисов (даже с ошибками).
const promises = [fetch(...), fetch(...)];
const results = await Promise.allSettled(promises);6. at() (для массивов и строк)
Удобный доступ к элементам с конца.
const arr = [1, 2, 3];
arr.at(-1); // 3 (аналог arr[arr.length - 1])7. URL.canParse()
Проверяет, является ли строка валидным URL.
URL.canParse("https://example.com"); // true8. Web Animations API (WAAPI)
Нативная анимация без CSS.
element.animate(
[{ opacity: 0 }, { opacity: 1 }],
{ duration: 1000 }
);9. navigator.clipboard
Работа с буфером обмена.
await navigator.clipboard.writeText("Текст для копирования");
const text = await navigator.clipboard.readText();10. Intl (Интернационализация)
Форматирование дат, чисел и валют под локаль пользователя.
new Intl.DateTimeFormat('ru-RU').format(new Date()); // "25.04.2025"
new Intl.NumberFormat('en-US').format(123456.789); // "123,456.789"💡 Вывод
Эти свойства и методы помогут писать более чистый, производительный и современный код. Многие из них поддерживаются во всех браузерах, а те, что ещё не везде работают, можно использовать с полифилами.
Какой из этих приёмов вам понравился больше всего? Попробуйте применить его в своём следующем проекте! 🚀