Установить абсолютную позицию и маржу - PullRequest
27 голосов
/ 19 февраля 2012

Я хотел бы установить для элемента position значение absolute и иметь значение margin-bottom, но кажется, что margin-bottom не имеет эффекта.

HTML:

<div id='container'></div>

CSS:

#container {
  border: 1px solid red;
  position: absolute; 
  top: 0px;
  right: 0px;
  width: 300px;
  margin-bottom: 50px; // this line isn't working
}

Ответы [ 7 ]

33 голосов
/ 01 ноября 2012

Я знаю, что это не очень своевременный ответ, но есть способ решить эту проблему.Вы можете добавить элемент «spacer» в элемент, расположенный absolute ly с отрицательным нижним полем и высотой, равной размеру отрицательного нижнего поля.1006 * CSS:

// same container code, but you should remove the margin-bottom as it has no effect

// spacer code, made it a class as you may need to use it often
.spacer {
    height: 50px;
    margin: 0 0 -50px 0;
    /* margin: 20px 0 -50px 0; use this if you want #container to have a 'bottom padding', in this case of 20px */
    background: transparent; /* you'll need this if #container's parent element has a different background from #container itself */
}
21 голосов
/ 30 июня 2013

Опираясь на Ответ Джоуи , для более чистой разметки используйте CSS :after -селектор, чтобы добавить проставку для желаемого нижнего поля.

CSS

#container:after {
    position: absolute;
    content: "";
    bottom: -40px;
    height: 40px;
    width: 1px;
}
15 голосов
/ 19 февраля 2012

Что вы ожидаете от margin-bottom, когда ваш элемент позиционируется по его верхней стороне?

margin-bottom будет делать что-либо только с элементом absolute ly-позиционированным, если элемент не имеет top собственность.

1 голос
/ 26 октября 2016

Вам необходимо установить position на relative, чтобы установить его margin.

margin-bottom, margin-leftи margin-right будет НЕ работать, когда элемент находится в position: absolute.

Пример: HTML:

<img src="whatever.png"/>

CSS:

img {
   position: relative;
   margin: 0 auto;
}
0 голосов
/ 06 июня 2018

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

В моем случае абсолютно позиционируемый элемент - это таблица, поэтому я добавил дополнительную пустую строку высотой 100 пикселей. Тогда граница, которая должна была быть внизу таблицы, вместо этого взяла «tr: nth-last-of-type (2) td».

Надеюсь, это поможет.

0 голосов
/ 09 мая 2017

Я нашел решение !!!

установить минимальную высоту контейнера, необходимо изменить положение с абсолютного на наследуемое, установить для свойства top значение по вашему выбору иdisplay должен быть inline-block.

Это сработало для меня, когда я попытался использовать абсолютное положение, переместить элемент со свойством top и попытаться добавить поле.

0 голосов
/ 27 апреля 2014

В некоторых случаях изменение position: absolute на position: relative также решает эту проблему.Если вы можете изменить свое положение, это будет самый простой способ решить проблему.В противном случае проставка Джои делает свое дело.

...