Положение абсолютное, но относительно родителя


458

У меня есть два элемента div внутри другого элемента div, и я хочу расположить один дочерний элемент div в верхнем правом углу родительского элемента div, а другой элемент div - внизу родительского элемента div с помощью css. Т.е. я хочу использовать абсолютное позиционирование с двумя дочерними элементами div, но расположить их относительно родительского элемента div, а не страницы. Как я могу это сделать?

Образец HTML:

<div id="father">
   <div id="son1"></div>
   <div id="son2"></div>
</div>

Вы хотите, чтобы son1 находился в верхнем правом углу отца, но где внизу должен быть son2? Внизу слева, справа или по центру?
j08691

1
В этом случае вам нужно будет установить position: относительно родительского элемента и position: absolute для дочерних элементов. На первом дочернем элементе вы должны поместить top: 0 и right: 0, чтобы расположить его в верхнем правом углу родительского элемента. На втором дочернем элементе вы должны поместить bottom: 0, чтобы расположить его в нижней части родительского элемента. Здесь есть отличная статья kolosek.com/css-position-relative-vs-position-absolute, подробно объясняющая относительное и абсолютное позиционирование.
Неша Зорич

Ответы:


814
#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 0;
}

#son2 {
   position: absolute;
   bottom: 0;
}

Это работает , потому что position: absoluteозначает что - то вроде «использования top, right, bottom, leftпозиционировать себя по отношению к ближайшему предку , который имеет position: absoluteили position: relative

Таким образом , мы делаем #fatherесть position: relative, и у детей position: absolute, а затем использовать topи bottomдля размещения детей.


17
Почему #father { position: relative; }требуется?
joshreesjones

4
Требуется изменить «правило положения» для тех, кто находится внутри него.
BlaShadow

36
@ mathguy54 Поскольку спецификация говорит, что абсолютно позиционированные элементы позиционируются относительно первого позиционируемого родителя, что означает любого родителя, который не имеет значения позиции static.
Алекс W

как насчет такого сценария: ОТЕЦ относителен, и его рост равен 100%, как позиционировать сына и сына2, скажем, на 20% и 70% роста отца соответственно?
Росситтен


27
div#father {
    position: relative;
}
div#son1 {
    position: absolute;
    /* put your coords here */
}
div#son2 {
    position: absolute;
    /* put your coords here */
}

1
Что делать, если вам нужно изменить размер родителя с ребенком?
FrenkyB

10

В случае, если кто-то хочет выставить ребенка div прямо под родителем

#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 100%;
}

Рабочая демоверсия Codepen


6

Если вы не предоставляете никакой позиции родителю, то по умолчанию это занимает static. Если вы хотите понять эту разницу, обратитесь к этому примеру

Пример 1 ::

http://jsfiddle.net/Cr9KB/1/

   #mainall
{

    background-color:red;
    height:150px;
    overflow:scroll
}

Здесь родительский класс не имеет позиции, поэтому элемент размещается в соответствии с телом.

Пример 2 ::

http://jsfiddle.net/Cr9KB/2/

#mainall
{
    position:relative;
    background-color:red;
    height:150px;
    overflow:scroll
}

В этом примере родитель имеет относительное положение, следовательно, элемент позиционируется абсолютно внутри относительного родителя.


А что, если у вас нет #mainall {height: 150px} ...? Я имею в виду, если mainall имеет динамическую высоту?
Альберт Катала

тогда ваш плавающий элемент будет относительно позиции, которую родительский элемент занимал при загрузке страницы (и css). Если вы хотите обновить это после загрузки страницы, используйте javascript - clientX и clientY - хорошее место для начала
Abraham Brookes
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.