позиція: родич залишає порожній простір


87

Код знаходиться тут: http://lasers.org.ru/vs/example.html

Як видалити порожній простір під основним блоком (#page)?


Ви маєте на увазі нижню прокладку, або щоб все це було вертикально відцентровано?
alex

Ви маєте на увазі простір між текстом у div #page та межею? Інакше я не впевнений, про який простір ви говорите.
Jeremy Battle

@Jeremy Battle Я теж не можу цього зрозуміти, хоча, схоже, має і Гуффа .
Алекс

Хтось ще не бачить цієї проблеми?
Майлз Грей,

Будь ласка , зверніться відповіддю зазначеного в [ stackoverflow.com/questions/13722095 / ... [1]: stackoverflow.com/questions/13722095 / ...
Сохел Pathan

Відповіді:


35

Ну, тоді не використовуйте відносне позиціонування. Елемент все ще займає простір там, де він був спочатку при використанні відносного позиціонування, і ви не можете позбутися цього. Наприклад, ви можете замість цього використовувати абсолютне позиціонування або змусити елементи плавати один біля одного.

Я трохи погрався з макетом, і пропоную вам змінити ці три правила на:

#layout { width: 636px; margin: 0 auto; }
#menu { position: absolute; width: 160px; margin-left: 160px; }
#page { width: 600px; padding: 8px 16px; border: 2px solid #404241; }

27
"і ви не можете позбутися цього". - ти можеш. Просто використовуйте від’ємне поле, як у відповіді.
Michał K

5
@ MichałK: Ні, це означає лише те, що ви перекриваєте порожній простір іншим елементом, а не те, що позбавляєтеся від порожнього простору. Ви можете використовувати лише негативні поля, щоб перекрити порожній простір від відносного позиціонування на стільки, скільки розмір елемента.
Guffa,

@ MichałK: Проголосувати за цю та інші абсолютно не пов’язані відповіді не допомагає, ви все одно не можете позбутися місця, спричиненого відносним розташуванням.
Гуффа,

1
@ MichałK: Оскільки ти можеш лише охопити простір, а не позбутися його, ти повинен мати інші елементи, розмір яких не менший за порожній простір, щоб покрити його. Якщо у вас, наприклад, є порожній простір від елемента, що має висоту 200 пікселів, і ви маєте лише елемент висотою 100 пікселів, щоб закрити отвір, у вас все одно залишиться 100 пікселів від отвору.
Гуффа,

1
Чому голос проти? Якщо ви не поясніть, що саме ви вважаєте неправильним, це не може покращити відповідь.
Guffa,

181

Ще одна хитрість, яка добре спрацювала для мене, полягає у використанні від’ємного поля внизу у відносному елементі, який ви перемістили. Не потрібно йти з абсолютним позиціонуванням.

Щось на зразок:

position: relative;
left: 100px
top: -200px;
margin-bottom: -200px;

Подібний (якщо не ідентичний) рішенню, яке я бачу зараз, із зеленого.


28
Чудова, проста відповідь. І прекрасний доказ того, що HTML / CSS - це виродка.
Synesso

1
@plang, схоже, не працює. Див. Jsfiddle.net/u7sq8rL7/1 . Зелений фон виходить за межі останнього елемента.
Pacerier

1
@Pacerier Не використовуйте margin-bottom. Очевидно, це не працює (подумайте); вам потрібна margin-top.
Вільям

2
Це працює чудово. Так, ви використовуєте margin-bottomз мінусовим числом, тому що хочете позбутися зайвого місця внизу.
дзвонить

хороший, якщо ваш макет у доброму стані, це буде працювати чудово
Віталій Терзієв


1
#page {
  padding-bottom: 0;
}

відсутність нижньої прокладки


Це правильна відповідь, але я б сказав, що вам, мабуть, краще за допомогою прокладки, оскільки її легше читати та більш стандартно використовувати в Інтернеті.
Битва за Джеремі

@Jeremy Battle Безумовно, прокладка виглядає набагато краще.
alex

@Kir Ви насправді можете просто змінити свій поточний стиль на відступ: 8px 16px 0px; щоб уникнути зайвого рядка у вашому CSS.
Джеремі Баттл

Я вважаю, що проблемою є 300px простір під контейнером вмісту, а не простір всередині контейнера ...
Гуффа

Сценарій створить анонімне поле всередині div (#page), і відповідно до специфікації CSS немає іншого способу керувати анонімним полем безпосередньо, і це анонімне поле успадкує властивість від свого батьківського (у цьому випадку #page). Тож краще змінити батьківський div, змінивши його властивість, як каже @alex. Якщо вищезазначене не відповідає критеріям, тоді використання негативного націнку також є рішенням у цьому сценарії.
кта

1

Спробуйте це правило:

#page {
  border: 2px solid #404241;
  bottom: 0;
  padding: 8px 16px;
  position: absolute;
  top: 70px;
  width: 600px;
}

Я змінив положення на абсолютне, це дозволяє використовувати bottom: 0 властивість.


1

У мене була подібна проблема. Найпростіший спосіб замінити зверху на margin-topдля #page.


margin-top з негативним значенням, замість top + margin-bottom, це шлях
xtian

1

У мене була та ж проблема. Негативне поле для мене не спрацювало, оскільки воно залишило масивну білу область там, де було раніше. Я вирішив цю проблему у своєму випадку, ввівши висоту вручну.

.maincontent {
    height: 675px;
}

1

Моя відповідь запізнюється, але це може допомогти іншим із подібною проблемою, яка була у мене.

Я був <div>з , position: relative;де всі дочірні елементи мають position: absolute;стиль. Це спричинило близько 20 пікселів до появи на моїй сторінці пробілів.

Щоб обійти це, я додав margin-top: -20px;до наступного елемента брата або сестри після <div>з position: relative;.

Якщо у вас раніше був елемент брата або сестри, ви можете використовувати margin-bottom: -20px;

section {
  height: 200px;
}
<h2>Extra Whitespace</h2>
<section>
  <div>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div>
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


<h2>No Whitespace margin-top</h2>
<section>
  <div>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div style="margin-top:-20px;">
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


<h2>No Whitespace margin-bottom</h2>
<section>
  <div style="margin-bottom:-20px;">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div>
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


0

Я зміг позбутися пробілів, використовуючи наступну структуру:

HTML-CSS фреймворк

І ось розмітка

<div id="the-force-moved-element>I've been moved</div>
<div id="the-hack-part-1">
    <div id="the-hack-part-2>The quick brown fox jumps over the lazy dog</div>
</div>
<p>Lorem ipsum dolor sit amet...</p>

0

На це питання, мабуть, добре відповіли - однак усі відповіді вище мали погані побічні ефекти в моєму макеті. Це те, що справді спрацювало для мене:

.moveUp {
    position: relative;
}
.moveUp > * {
    position: absolute;
    width: 100%;
    top: -75px;
}

/** This part is just design - ignore it ... ****/
.box1, .box2, .box3 {
    height: 100px;
    color: white;
}
.box1 {
    background: red;
}
.box2 {
    background: blue;
    height: 50px;
}
.box3 {
    background: green;
}
<div class="box1">Box 1</div>
<div class="moveUp"><div class="box2">Box 2 - 75px up</div></div>
<div class="box3">Box 3</div>


0

Найкраще рішення, якщо ви не хочете залишати пробіли внизу (відносно)

Полягає у використанні поля зверху та положення: липке

#page {
     margin-top: -280px;
     position: sticky;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.