Подтвердить что ты не робот

Поведение top: auto; бамбук меня

Привет Я действительно смущен некоторыми основами с абсолютным позиционированием.

<!DOCTYPE html>
<html>
<head>    
<link href="#" onclick="location.href='http://yui.yahooapis.com/3.0.0/build/cssreset/reset-min.css'; return false;" rel="stylesheet" type="text/css" />

<style>    
#containingBlock {
  position: relative;
  background: green;

}
#abs {
  position: absolute;
  background: blue;
  top: auto;
}  
</style>
</head>
<body>

<div id="containingBlock">

  <p>foo</p>

  <div id="abs">bar</div>

</div>

</body>
</html>

С разметкой, расположенной выше, div # abs не перекрывает параграф foo.

Я знаю, что могу сделать это, указав верхнее значение 0, а не auto, но поскольку div #, содержащий Block, не имеет прописных букв, я думал, что auto и 0 будут делать то же самое.

Однако, если абзац абзаца и div # abs переключаются в порядке источника - для того, чтобы сделать бар перед foo -top: auto; работает точно так, как я ожидал.

Любые объяснения оценены!

4b9b3361

Ответ 1

Вы не позиционировали эти элементы, вы только что указали, какой тип позиционирования вы хотите использовать. В этом случае значение auto на самом деле ничего не делает, потому что элемент #abs помещается прямо там, где он обычно будет. Если вы удалите сегмент top: auto;, это не повлияет на элемент.

"bar" не перекрывает "foo", потому что вы не позиционировали его для этого. Он содержится в элементе #containingBlock и помещается под блочным элементом <p>, потому что "foo" занимает дискретный объем пространства. Вы хотите переопределить это? Установите top или другие соответствующие значения позиции. Чтобы повторить то, что говорили другие, top:auto просто позиционирует верхнюю часть этого элемента как можно выше, чем позволяет номер (что и требовалось сделать элементу).

Для справки в будущем значение auto используется, когда родительское свойство CSS переопределяет стиль дочернего элемента. Например, допустим, у вас был более сложный код, в котором было правило применять маржу к каждому div в #conceptBlock. Если вы хотите изменить это до нормального значения, вы включили бы margin:auto; в свой CSS с CSS.

Ответ 2

Когда вы устанавливаете абсолютное положение (относительное и т.д.) и не указываете новую позицию для элемента, оно будет помещено туда, где оно обычно будет оставаться, если не было положения: абсолютное.

Настройка автоматического значения - это не указание верхнего положения, и поэтому оно помещается под абзацем, где оно обычно остается, если не было применено специальное позиционирование.

Ответ 3

это легко (J/K!), auto и 0 - это не одно и то же. Я имею в виду, что большинство раз они

auto - это когда агент визуализации (браузер) пытается решить, что вы имеете в виду. в случае # 1 над агентом рендеринга достаточно умен, чтобы знать, что есть предшествующий элемент, поэтому он позволяет ему

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

замена исходного порядка одинакова, тогда он достаточно умный, чтобы знать, что больше нет чего-либо предшествующего ему, поэтому автоматически будет означать 0 в этом случае

Ответ 4

Использование auto для top (или слева) указывает браузеру расположить элемент точно так же, как если бы элемент имел "position: fixed".

Этот jsfiddle демонстрирует, что я имею в виду: http://jsfiddle.net/kUmKW/

Попробуйте изменить значение left или top из auto, чтобы узнать, что произойдет.