Jump to content
  • 0

Фиксированные размеры Body?


mladwiUverstalwik
 Share

Question

Доброго времени и доброго здоровья как новичкам так и Гуру!Подскажите почему наблюдается такой казус,при том когда у Body прописаны ширина,высота и фон,не имея содержания контейнер отображается на всю страницу?я что-то упустил?Прошу направить на путь истинный.С уважением.

Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

если не задан фон у html то фон body начинает занимать все пространство, вообще это якобы баг https://css-tricks.com/just-one-of-those-weird-things-about-css-background-on-body/

 

но мне кажется это наоборот фишка. Просто задайте белый фон у html и все заработает. https://jsfiddle.net/1n5rsb60/

Link to comment
Share on other sites

  • 0

Это не баг, такое поведение определяет спецификация.

где в спецификации хоть слово про растягивание фона на все пространство браузера даже при фиксированных размерах у body и отсутствия фона у html?

Link to comment
Share on other sites

  • 0

 

где в спецификации хоть слово про растягивание фона на все пространство браузера даже при фиксированных размерах у body и отсутствия фона у html?
 

link

 

Мне кажется ты не понимаешь о чем речь. вот мой пример выше https://jsfiddle.net/1n5rsb60/

Убери фон у элемента html

Link to comment
Share on other sites

  • 0

...и фон от body становится по всему вьюпорту. Вы об этом?

именно, это при том что у body заданы фиксированные размеры 100 на 100 пикселей!!! В спеке я в упор не вижу где сказано о том что body себя ведет так и при явных размерах, хотя теоретически должен вести как блочный элемент коим и является. И это не мои наблюдения, а ребят с css-tricks

Link to comment
Share on other sites

  • 0

Там ведь так сказано:

 

For documents whose root element is an HTML HTML element [html401] or an XHTML html element[XHTML11]: if the computed value of ‘background-image’ on the root element is ‘none’ and its ‘background-color’ is ‘transparent’, user agents must instead propagate the computed values of the background properties from that element's first HTML BODY or XHTML body child element. The used values of that BODY element's background properties are their initial values, and the propagated values are treated as if they were specified on the root element.

 

А какие размеры вы поставите на body - тут вообще не имеет никакого значения.

Link to comment
Share on other sites

  • 0

Это не баг.

По спеке, я так понимаю, есть такое понятие как Canvas, область, на которой происходит рендеринг.

Этот холст имеет размеры области просмотра и берет фон у элемента HTML.

А элемент  HTML, если у него не задан фон, берет его у элемента BODY.

Вот и получается, что фон на весь экран.

Link to comment
Share on other sites

  • 0
А какие размеры вы поставите на body - тут вообще не имеет никакого значения.

 

В том и суть что пока не прописывают фон элементу html или не ограничивают размеры body никто и знать не знает о таком поведении(если конечно не читал эту часть спецификации), но стоит лишь изменить одну из этих вещей и фон начинает вести себя не ожидаемым для пользователя образом. Это проблему заметили в одной из версий нормалайза когда там был прописан фон для html и люди не могли понять почему назначая фон для body они не получают заливки всего вьюпорта. такое поведение фона у body оправданно когда не трогают его размеры и не прописывают фон элементу html. Но как только разработчик прописывает у body размеры он ожидает что тот будет вести себя как любой другой блочный элемент, но этого не происходит в плане фона и в этом и минус который в спеке не описан, там описано так как будто бы никто и никогда не будет трогать размеры body и не будет прописывать фон для html. Кстати сказать в спеке css2 даже была рекомендация задавать фон именно для body, а не для html. Странная рекомендация при таком поведении не правда ли?


Это не баг.

По спеке, я так понимаю, есть такое понятие как Canvas, область, на которой происходит рендеринг.

Этот холст имеет размеры области просмотра и берет фон у элемента HTML.

А элемент  HTML, если у него не задан фон, берет его у элемента BODY.

Вот и получается, что фон на весь экран.

у html он остается по умолчанию transparent ибо при другом значении фон body перестанет себя так вести, так что его берет именно выше названный Canvas

Link to comment
Share on other sites

  • 0
Но как только разработчик прописывает у body размеры он ожидает что тот будет вести себя как любой другой блочный элемент, но этого не происходит в плане фона и в этом и минус который в спеке не описан, там описано так как будто бы никто и никогда не будет трогать размеры body и не будет прописывать фон для html.

 

Не дословно:

Холст документа - это поверхность, на которой отрисовывается документ. Так как нет элементов, соответствующих канвасу, для того, чтобы стилизовать его, CSS распространяет фон от корневого элемента (html ← body)...

 

Поэтому когда меняете размеры body, на фон канваса это ведь никак повлиять не может.

Link to comment
Share on other sites

  • 0
Поэтому когда меняете размеры body, на фон канваса это ведь никак повлиять не может.

 

Да это понятно. Дело не только в фоне, а втом что когда от body ожидается поведение как у блочного элемента, коим он и является, вот эта фишка с фоном рабочей области лишняя, и люди не ожидают такого поведения, ибо body в большинстве случаем никто и не трогает. И собственно тема так и называется "Фиксирвоанные размеры body"

Link to comment
Share on other sites

  • 0

BODY  — служебный элемент, в том смысле, что создается браузером даже в случае его отсутствия.

Поэтому я бы не стал относиться к нему, как к обычному элементу.

Нужны фиксированные размеры или еще какие свойства, создай DIV и делай че хочешь)

И фишка с фоном не лишняя, иначе бы пришлось каждый раз ради фона явно задавать высоту.

Link to comment
Share on other sites

  • 0

BODY  — служебный элемент, в том смысле, что создается браузером даже в случае его отсутствия.

Поэтому я бы не стал относиться к нему, как к обычному элементу.

Нужны фиксированные размеры или еще какие свойства, создай DIV и делай че хочешь)

И фишка с фоном не лишняя, иначе бы пришлось каждый раз ради фона явно задавать высоту.

То что браузер создает его в случаях если нет это дело парсера который приводит документ к единому виду в независимости от его структуры. В спецификации насколько помню такой рекомендации для создателей браузеров нет =)

Если относиться к body как к служебному элементу то у меня вопрос "нафига ему задан margin по умолчанию?" Ведь проще и правильнее создать div и делать с ним что хочешь =))

 

Я не говорю что эта фишка с фоном лишняя, я в первом же комментарии написал что считаю это именно фишкой, некоторые думают что это баг(это я видел в сети), но при этом мне кажется что фишка с фоном полезна только если body никто не трогает в плане размеров. Это ведь не явное поведение вот в чем суть, особенно учитывая привязку к фону html.

Link to comment
Share on other sites

  • 0
"нафига ему задан margin по умолчанию?"

 

Думаю, затем же, зачем заданы отступы у параграфов или кегль у заголовков. Базовая типографика.

 

Это ведь не явное поведение вот в чем суть

 

Возможно, эта фишка чисто историческая.

Представьте, что вы создаете документ, используя только стандартные теги. Без CSS.

Тогда фон для BODY, который займет весь вьюпорт очень даже желателен)

Link to comment
Share on other sites

  • 0
Возможно, эта фишка чисто историческая. Представьте, что вы создаете документ, используя только стандартные теги. Без CSS. Тогда фон для BODY, который займет весь вьюпорт очень даже желателен)

 

Вот кстати я тоже склоняюсь к тому же мнению, что это наследие такое. Но в некоторых моментах мне кажется лишнее оно. К примеру можно делать прижатый футер без обертки https://jsfiddle.net/80u0o0Lk/

Но приходится задавать цвет у html, а то фон для body будет работать не так как надо. Хотя с другой стороны фон для страницы все равно задавать нужно, а при таком раскладе и body начинает работать как ожидаешь.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Brodyaga337
      Поочему фон со звёздами не прячется под body у которого:
      body { background-color: #EDE8C9; position:relative; z-index: 2; font-family: "RobotoRegular", sans-serif; font-size: 16px;
    • By capt.pr
      Подскажите пожалуйста, можно ли в пределах одной html-страницы использовать теги <head> и <body> более одного раза.
      Пытаюсь работать с одной из партнерских программ. Код их виджетов выводится тремя кусками:
       
      1. <div id="">   </div> помещается в месте вывода виджета
       
      2. <script src="" type="text/javascript">   </script>
       
      3. <script type="text/javascript"> параметры скрипта </script>
       
      В случае установки более чем одного виджета на одной странице, вторая часть оставляется только один раз, из кода второго и следующих виджетов удаляется. Третьи части располагаются перед тегом </body> в том порядке, в котором выводятся виджеты.
       
      Случайно подсмотрел у одного товарища, который тоже использует эту партнерку как у него установлен код. Оказалось, что у него на странице виджеты выводятся 4 раза.
       
      Первый раз как
      <head> 2. <script src="" type="text/javascript"></script> </head>
      1. <div id=""></div>
      3. <script type="text/javascript">параметры скрипта</script>
       
      Второй раз по обычной схеме, но все три части сразу.
       
      Третий раз как
      <head> 2. <script src="" type="text/javascript"></script> </head>
      1. <div id=""></div>
      <body>3. <script type="text/javascript">параметры скрипта</script></body>
       
      Четвертый раз по обычной схеме, но тоже все три части сразу.
       
      Причем секция <head></head> есть в начале страницы, где обычно и бывает и вся страница заключена в <body></body>.
      Т.е. <body></body> встречается в документе дважды, причем одна вложена в другую, <head></head> трижды, и не пересекаются.
    • By mladwiUverstalwik
      Доброго времени суток!Помогите разобраться в вопросе.Почему Body с бэкграундом-фоном отображается на всю ширину страницы,причем если поставить для дива внутри маржин-авто,то оно центрируется именно по боди с заданными размерами?
      Вот ссыль на код.http://liveweave.com/

      прошу наставить на путь истинный,али ткнуть в мат часть.С уважением.
    • By horprogs
      Привет!
      Пытаюсь сделать рамку для body, т.е. рамку у всей страницы документа. Мне нужно чтобы она имела отступ в 15px от края, причем содержимое страницы обрезаться не должно. Если я указываю у body свойства border и padding, то содержимое соответственно обрезается по краям. 
      Добавлял новый тег в начале страницы, рамка отображается как нужно, но из-за структуры сайта не могу с позиционировать содержимое поверх этого нового блока.
      Какие есть способы добавления такой рамки к странице?
       
      http://s010.radikal.ru/i312/1508/f7/742465e57832.png
       
      Спасибо
    • By jontsk
      Доброе время суток.
      Так-как в javascript`ах я не силен, опять обращусь к умельцам.
       
      Существует проблема с реализацией всплывающих блоков.
       
      Скрипт в идеале должен работать так: при клике по пункту меню .libut.***1 выводится .faqinfobox.***1 , при клике вне дива или по клике по .libut.***1  .faqinfobox.***1 закрывается, а при клике на .libut.***2 выводится .faqinfobox.***2 , а .faqinfobox.***1 закрывается.
       
      Что имелось до фансибокса: http://jsfiddle.net/e5wet0fx/1/
       
      Поставил фансибокс, настроил все кроме привязки. Сейчас он открывается по центру окна, а надо чтобы открывался на позиции заданной в дефолтном.цсс
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy