Jump to content
  • 0

Вопрос по абсолютному позиционированию


Igor Schnaider
 Share

Question

http://codepen.io/anon/pen/LpgeVq?editors=110

Проблема в следующем. Первый абсолютно спозиционированный относительно body элемент располагается чуть ниже верха страницы. (Должен примыкать прямо к верху: top: 0 стоит.) Почему верхнее поле заголовка (body > h1) так влияет на него именно в body?

Но этого не происходит в простом wrapper'е.

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

У тебя в body стоит position: relative;

Вопрос не в этом. Почему так происходит? Сам body начинается с верхнего левого края. Значит position: absolute + top: 0 должен тоже примыкать элемент к верху.

Link to comment
Share on other sites

  • 0

 

Сам body начинается с верхнего левого края

Неправда. body ушел ниже от отступа h1. 

 

Точно.

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

Link to comment
Share on other sites

  • 0

 

 

Сам body начинается с верхнего левого края

Неправда. body ушел ниже от отступа h1. 

 

Точно.

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

 

Ага, вот оно: http://www.w3.org/TR/CSS2/colors.html#background

Оказалось, это html подкрасился тоже. Вот это я не знал. Теперь все встало на свои места.

Спасибо за комментарии.

  • Like 2
Link to comment
Share on other sites

  • 0

Почитайте про схлопывание отступов (http://softwaremaniacs.org/blog/2005/09/05/css-layout-flow-margins/). В вашем случае отступ первого h1 создал отступ в body. В результате абсолютно спозиционированный блок примкнул не к самому верху, а к границе этого отступа. Физически с body ничего не случилось. Во втором блоке, который .wrapper, отступ у h1 вывалился за пределы .wrapper, но внутренних отступов он не создал, поэтому абсолютно спозиционированный блок примкнул к самому верху. Надеюсь, понятно объяснил)

Link to comment
Share on other sites

  • 0

Почитайте про схлопывание отступов (http://softwaremaniacs.org/blog/2005/09/05/css-layout-flow-margins/). В вашем случае отступ первого h1 создал отступ в body. В результате абсолютно спозиционированный блок примкнул не к самому верху, а к границе этого отступа. Физически с body ничего не случилось. Во втором блоке, который .wrapper, отступ у h1 вывалился за пределы .wrapper, но внутренних отступов он не создал, поэтому абсолютно спозиционированный блок примкнул к самому верху. Надеюсь, понятно объяснил)

Не, вопрос про другое был, не про margin collapsing.

У меня путаница была именно из-за фона. Думал, раз фон до верха доходит, значит там и есть верх body. Потому что фон в margin не попадает. А оказалось, что по спецификации корневой элемент должен копировать свойство background элемента body. Поэтому не увидел этого отступа.

p.s. если :root { background: #fff; }, видно будет :-)

Edited by Igor Schnaider
Link to comment
Share on other sites

  • 0

Хорошо все таки когда человек задает вопрос и не сидит ждет когда ему дадут код который можно скопировать и вставить, а ищет еще и сам)


Но тема действительно интересная, давайте обсуждать)

Например в IE11 все показывается как надо, без отступов.

Если поставить для body хотя бы 1px padding то опять же все работает в связке с overflow:hidden;. Получается это баг движка (IE или остальные?), или это недоработка самой спецификации? Что делает padding, что с помощью него все встает на свои места? 

Edited by Нарек
Link to comment
Share on other sites

  • 0

Хорошо все таки когда человек задает вопрос и не сидит ждет когда ему дадут код который можно скопировать и вставить, а ищет еще и сам)

Но тема действительно интересная, давайте обсуждать)

Например в IE11 все показывается как надо, без отступов.

Если поставить для body хотя бы 1px padding то опять же все работает в связке с overflow:hidden;. Получается это баг движка (IE или остальные?), или это недоработка самой спецификации? Что делает padding, что с помощью него все встает на свои места? 

Я не разу не видел что бы к body применялся relative, блок абсолют себе придумал из-за этого отступы так как он понимает что у родителя в голове бобо что тут обсуждать вообще )) Помести в absolute h1 и он поймет что ему нужно уже самому отталкиваться от заданых правил. Он не понимает как это так body relative, который может быть где-то в невесомости. Укажите ему параметры left, top и вы поймёте что там всё нормально. И тут еще одна вещь присутствует, в любой не понятной ситуации браузер не может выдать ошибку и ему нужно импровизировать с любыми глупостями верстальщика что бы всё работало.

Edited by Mozzie
Link to comment
Share on other sites

  • 0
Я не разу не видел что бы к body применялся relative

А я видел.

Начиная вот отсюда

блок абсолют себе придумал из-за этого отступы так как он понимает что у родителя в голове бобо что тут обсуждать вообще )) Помести в absolute h1 и он поймет что ему нужно уже самому отталкиваться от заданых правил. Он не понимает как это так body relative, который может быть где-то в невесомости. Укажите ему параметры left, top и вы поймёте что там всё нормально. И тут еще одна вещь присутствует, в любой не понятной ситуации браузер не может выдать ошибку и ему нужно импровизировать с любыми глупостями верстальщика что бы всё работало.
 

ничего не понял. Но все таки вопрос не об этом, суть вопроса описана выше.

Link to comment
Share on other sites

  • 0

Хорошо все таки когда человек задает вопрос и не сидит ждет когда ему дадут код который можно скопировать и вставить, а ищет еще и сам)

Но тема действительно интересная, давайте обсуждать)

Например в IE11 все показывается как надо, без отступов.

Если поставить для body хотя бы 1px padding то опять же все работает в связке с overflow:hidden;. Получается это баг движка (IE или остальные?), или это недоработка самой спецификации? Что делает padding, что с помощью него все встает на свои места? 

Нет. Вот здесь как раз все правильно. Это к вопросу про коллапс марджинов.

Суть в том, что если у родителя стоят padding или border (не none), тогда поле не будет выходить за родителя.

В моем примере как раз есть второй элемент (wrapper который). Я его специально создал, потому что он как раз ведет себя как надо. А body, как мне казалось, нет. Если у .wrapper убрать overflow, то видно, что заголовок вверх поднимется, а поля просто выйдут за границы.

Просто в случае с body элемент на самом верху, поэтому создается такой эффект. Фактически заголовок съезжает вниз, но при этом сам body возвращается на освободившееся место.

 

http://www.w3.org/TR/CSS21/box.html#collapsing-margins

 

The top margin of an in-flow block element collapses with its first in-flow block-level child's top margin if the element has no top border, no top padding, and the child has no clearance.

Edited by Igor Schnaider
Link to comment
Share on other sites

  • 0

Я не разу не видел что бы к body применялся relative

Например, такой случай http://codepen.io/anon/pen/MaPBLm?editors=110

Если убрать у body правило position: relative, тогда абсолютно позиционированный блок будет исходить из размеров вьюпорта.

Даже если ему (тому, который абсолютно спозиционирован) height: 100% явно задать (вот тут я еще не понял, почему так происходит).

Edited by Igor Schnaider
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 Mondeus
      Доброго всем времени суток. Прошу помощи. Научите принципу изменения футера. Движок Xenforo. Версия 2.2.10. Стиль дефолтный. Что именно нужно в итоге на фото примере. Мой шаблон app.footer less имеет следующее значение. 
      .p-footer { .xf-publicFooter(); a { .xf-publicFooterLink(); } } .p-footer-inner { .m-pageWidth(); .m-pageInset(); padding-top: @xf-paddingMedium; padding-bottom: @xf-paddingLarge; } .p-footer-row { .m-clearFix(); margin-bottom: -@xf-paddingLarge; } .p-footer-row-main { float: left; margin-bottom: @xf-paddingLarge; } .p-footer-row-opposite { float: right; margin-bottom: @xf-paddingLarge; } .p-footer-linkList { .m-listPlain(); .m-clearFix(); > li { float: left; margin-right: .5em; &:last-child { margin-right: 0; } a { padding: 2px 4px; border-radius: @xf-borderRadiusSmall; &:hover { text-decoration: none; background-color: fade(@xf-publicFooterLink--color, 10%); } } } } .p-footer-rssLink { > span { position: relative; top: -1px; display: inline-block; width: 1.44em; height: 1.44em; line-height: 1.44em; text-align: center; font-size: .8em; background-color: #4682B4; border-radius: 2px; } .fa-rss { color: white; } } .p-footer-copyright { margin-top: @xf-elementSpacer; text-align: center; font-size: @xf-fontSizeSmallest; } .p-footer-debug { margin-top: @xf-paddingLarge; text-align: right; font-size: @xf-fontSizeSmallest; .pairs > dt { color: inherit; } } @media (max-width: @xf-responsiveMedium) { .p-footer-row-main, .p-footer-row-opposite { float: none; } .p-footer-copyright { text-align: left; padding: 0 4px; // aligns with other links } }  

    • By Mix9
      есть див с 5 img, при уменьшении экрана див выходит за него. Я добавил overflow: auto для этого div в надежде на то, что я смогу прокручивать фотки с помощью скроллбара, однако даже с ним почему-то я не вижу часть фоток которые вышли за границу. Что с этим можно сделать? класс video повторяется 5 раз, я тут оставил только 1 
      .content{ width: 90%; background-color: #333; } .video{ margin: 0px 4px 0px 4px; width: 310; display: flex; flex-direction:column; } .video_button_text{ margin-top: 10px; display: flex; flex-direction: row; font-size: 20px; color: white; } .video_text_div{ display: inline-block; width: 250px; } .video_text{ text-align: justify-all; margin: 0px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .slidan_videos{ margin: 0px 10px 0px 20px; overflow: auto; width: auto; margin-bottom: 50px; display: flex; flex-direction: row; justify-content: space-around; } <div class="content"> <div class = slidan_videos> <div class = video> <div> <a href = 'ссылка'><img class="img" src=""картинка"></a> </div> <div class = video_button_text> <div class = avatarka_div> <a href="ссылка" target="_blank"><img class = avatarka src="картинка"></a> </div> <div class = video_text_div> <p class = video_text><a href="ссылка">текст</a></p> </div> </div> </div>
    • By Andy_Code
      Здравствуйте! Проблема заключается в следующем: есть стартовый шаблон от "Фрилансера по жизни" версии 2021 года, открываю в VSCode, ввожу в терминале npm i затем gulp, все срабатывает как и должно, создается папка с результатом, начинаю прописывать стили для header, задаю ограничивающий контейнер и при проверке работоспособности данного контейнера выясняется, что стили, прописанные мной перекрывают стили медиа-запросов, прописанных в шаблоне и по итогу адаптив не работает, получается что итоговый css собирается в не правильном порядке! Подскажите, пожалуйста, как подобную проблему можно исправить?)
    • By vladdvin
      Верстаю макет с Фигмы - https://www.figma.com/file/2rdy1qjBTl7D6BAC8S4qlf/Webovio?node-id=0%3A1. Наверстал
      CSS
      В результате отображается следующая картинка

      в режиме инструментов разработчика. А вне режима вообще отображает

      Подскажите как добиться отображения текста как на макете.
    • By RaiderCoder
      Здравствуйте , сделал макет сайта для интернет магазина . Но столкнулся с проблемой при верстке кнопок на главной странице и не нашел информации как можно уместить текст + несколько картинок в одну кнопку. Знает кто решение и реалезуемо оно вообще ?

×
×
  • 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