Это правильное поведение .1 В режиме стандартов , body
, , а также html
, не принимает сразу вверх по всей высоте области просмотра, даже если она появляется, когда вы применяете только фон к последнему. Фактически, элемент html
будет зависеть от фона body
, если вы не дадите ему свой собственный фон, и html
передаст это в окно просмотра:
Фон корневого элемента становится фоном холста, а его область рисования фона распространяется на весь холст, хотя любые изображения имеют размер и расположение относительно корневого элемента, как если бы они были нарисованы только для этого элемента. (Другими словами, область фонового позиционирования определяется как для корневого элемента.) Если значение «background-color» корня «прозрачно», фоновый цвет холста зависит от UA. Корневой элемент еще не нарисовал этот фон, т. Е. Используемое значение его фона прозрачно.
Для документов, корневым элементом которых является элемент HTML
blockquote>HTML
или элемент XHTMLhtml
: если вычисленное значение «background-image» в корневом элементе «none», а его «background-color» является «прозрачным», пользовательские агенты должны вместо этого распространять вычисленные значения свойств фона из первого HTMLBODY
или XHTML этого элементаbody
дочерний элемент. Используемые значения фоновых свойств этого элементаBODY
являются их начальными значениями, а распространенные значения обрабатываются так, как если бы они были указаны в корневом элементе. Рекомендуется, чтобы авторы HTML-документов указывали фон canvas для элементаBODY
, а не на элементHTML
.Тем не менее, вы можете наложить любое фоновое изображение поверх цвет фона на одном элементе (либо
html
, либоbody
), не полагаясь на два элемента - просто используйтеbackground-color
иbackground-image
или объедините их в свойстве стенограммыbackground
:body { background: #ddd url(background.png) center top no-repeat; }
Если вы хотите объединить два фоновых изображения , вам нужно полагаться на несколько фонов. Для этого нужно всего два дня:
- В CSS2, это то, где удобно стилизовать оба элемента: просто установите фоновое изображение на
html
и другое изображение наbody
, которое вы хотите наложить поверх первого. Чтобы обеспечить отображение фонового изображения наbody
на полной высоте окна просмотра, вам также необходимо применитьheight
иmin-height
:Кстати, причина, по которой вам нужно указатьhtml { height: 100%; background: #ddd url(background1.png) repeat; } body { min-height: 100%; background: transparent url(background2.png) center top no-repeat; }
height
иmin-height
наhtml
иbody
соответственно, потому что ни один элемент не имеет внутренней высоты. Оба по умолчаниюheight: auto
. Это viewport имеет высоту 100%, поэтомуheight: 100%
берется из окна просмотра, а затем применяется кbody
как минимум, чтобы разрешить прокрутку содержимого.- В CSS3 синтаксис был расширенный, поэтому вы можете объявить несколько значений фона в одном свойстве , исключая необходимость применения фонов к нескольким элементам (или отрегулируйте
height
/min-height
):Единственная оговорка заключается в том, что в один многослойный фон, только нижний слой может иметь фоновый цвет. В этом примере вы можете увидеть, что значениеbody { background: url(background2.png) center top no-repeat, #ddd url(background1.png) repeat; }
transparent
отсутствует на верхнем уровне. И не беспокойтесь - поведение, указанное выше, с распространенными значениями фона работает точно так же, даже если вы используете многослойные фоны.Если вам нужно поддерживать старые браузеры, Мне нужно пойти с помощью метода CSS2, который поддерживается полностью в IE7.
Мои комментарии в этот другой ответ объясняют с помощью прилагаемой скрипты , как
body
на самом деле смещается по положениюhtml
по умолчанию, даже если кажется, что он выставляется вместо этого снова из-за этого, казалось бы, странного явления.1 Это может иметь его корни в настройке атрибутов HTML
background
иbgcolor
вbody
, что приводит к тому, что фоновый атрибут применяется ко всему окну просмотра. Подробнее об этом здесь .