Как задать цвет фона в CSS: свойство background-color

background-color задаёт цвет фона элемента: именем цвета, HEX-кодом или через rgb(). По умолчанию фон прозрачный, и это значение не передаётся дочерним элементам автоматически - каждому элементу фон нужно задавать отдельно.

Попробуй прямо сейчас: смени background-color у .child на обычный сплошной цвет (например tomato) или на transparent - посмотри, как меняется картинка.

Как задать background-color: имя цвета, HEX и RGB

background-color принимает те же форматы цвета, что и свойство color для текста (см. урок про цвет текста): английское имя цвета, HEX-код вида #rrggbb или функцию rgb(). Разница только в том, что background-color красит фон элемента, а не сам текст внутри него.

background-color: tomato; - именованный цвет, самый простой способ для базовых оттенков.

color: tomato; вместо background-color - изменится цвет ТЕКСТА, а не фона элемента.

Прозрачный фон по умолчанию и почему цвет не наследуется

Пока background-color не задан явно, у элемента прозрачный фон - виден фон того, что находится позади (например фон родителя или страницы). Важно: background-color не наследуется от родителя, в отличие от некоторых текстовых свойств. Если у родителя жёлтый фон, а у ребёнка background-color не задан вовсе, ребёнок не "получает" жёлтый цвет - он просто остаётся прозрачным, и жёлтый цвет родителя виден сквозь него.

.child { background-color: gold; } - если нужен тот же фон, что у родителя, его нужно задать ребёнку явно, отдельной строкой.

Расчёт на то, что .child сам "унаследует" background-color родителя - так не работает: у ребёнка останется значение по умолчанию, transparent.

Закрашивает ли background-color место под рамкой

По умолчанию фон элемента заливает область вплоть до внешнего края рамки (border) - то есть буквально ПОД самой рамкой. Обычно это незаметно, потому что сплошная непрозрачная рамка просто рисуется поверх фона и полностью его закрывает. Но если рамка пунктирная, точечная или частично прозрачная, в зазорах становится виден именно цвет фона элемента, а не то, что находится позади него.

border: 8px dashed #333; у элемента с background-color - в промежутках между штрихами рамки виден цвет фона самого элемента.

Ожидание, что фон "останавливается" точно на границе контента и не заходит под рамку - по умолчанию это не так, фон заливает область вплоть до внешнего края border.

Из истории background-color - одно из самых старых свойств CSS: оно уже было в первой версии спецификации CSS1 от 17 декабря 1996 года, с тем же значением по умолчанию transparent и тем же правилом "не наследуется", что и сегодня, спустя почти 30 лет. Источник: w3.org - CSS1, раздел про background-color, 1996.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Рассчитывают, что дочерний элемент автоматически получит фон родителя background-color не наследуется - у ребёнка остаётся transparent, если не задать явно Указывать background-color отдельно для каждого элемента, которому нужен фон
Пытаются задать два цвета сразу через background-color для эффекта градиента Свойство принимает только один сплошной цвет - второе значение просто не сработает Для градиента использовать background-image: linear-gradient(...)
Не учитывают, что фон по умолчанию заходит под рамку При пунктирной или полупрозрачной рамке цвет фона неожиданно "просвечивает" в зазорах Это нормальное поведение border-box - при необходимости ограничить область фона использовать background-clip
Опечатка в названии класса в CSS или в атрибуте class в HTML Браузер тихо игнорирует правило целиком - ни ошибки, ни визуального эффекта Сверить название класса в CSS и в разметке символ в символ

Шпаргалка

Что нужноКак сделать
Именованный цветbackground-color: tomato;
HEX-кодbackground-color: #ffcc00;
RGBbackground-color: rgb(30, 144, 255);
С прозрачностьюbackground-color: rgba(30, 144, 255, 0.4);
Прозрачный (по умолчанию)background-color: transparent;
Принудительно скопировать цвет родителяbackground-color: inherit;

Коротко: отвечаем на вопросы

Наследуется ли background-color от родительского элемента?

Нет. Если у дочернего элемента background-color не задан, он остаётся прозрачным (transparent), и через него просто виден фон родителя - но это не то же самое, что реальное наследование значения. Если нужен именно такой же цвет у ребёнка, его нужно задать отдельно.

Почему background-color иногда не отображается, хотя в CSS всё написано вроде бы правильно?

Самая частая причина - опечатка в имени класса или селектора (в CSS написано одно название, а в HTML - слегка другое), из-за которой правило просто не находит свой элемент. Также фон может быть не виден, если у блока фактически нулевая высота (например все дочерние элементы имеют float без явного clearfix) - тогда красить попросту нечего.

Категория
css
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×