препълване: скрито игнориране на долната подложка

В следващия пример долната подложка се игнорира и текстът преминава към дъното на елемента, преди да се скрие. На какво се дължи това?

<div style="overflow: hidden; width: 300px; height: 100px; padding: 50px;">
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
</div>

Изглед с Firebug (лилаво е подложка, синьо е действителната област на съдържанието):

Firebug


person James Skidmore    schedule 24.01.2012    source източник
comment
съжалявам, но какво друго трябва да се случи? P са блокови елементи и не плават, div има фиксирана височина, така че P елементите в крайна сметка се припокриват с подложката ...   -  person Hannes    schedule 24.01.2012
comment
Задайте преливане на превъртане, след което превъртете съдържанието до дъното. Там ще намерите долната подплата.   -  person Salman A    schedule 24.01.2012
comment
намерихте ли решение за това? очаквам същия проблем за правилната подложка   -  person wutzebaer    schedule 02.10.2013
comment
възможен дубликат на CSS padding overrides overflow?   -  person challet    schedule 19.07.2014


Отговори (10)


Предпочитам да използвам възможно най-малко <div>.

<div class="container">
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
</div>

.container{
  padding: 30px 30px 0;
  position: relative;
  width: 240px;
  height: 170px;
  border:1px solid #000;
  overflow: hidden;
}
.container:after{
  content: ' ';
  display: block;
  background-color: red;
  height: 30px;
  width: 100%;
  position: absolute;
  bottom: 0;
}

http://jsfiddle.net/bgaR9/

естествено в свят без IE ‹ 9

person Marco Melluso    schedule 16.01.2013
comment
Моля, прегледайте този отговор. Изглежда не допринася за въпроса. - person Jules; 16.01.2013
comment
Не мисля така. Виждали ли сте CSS в jsFiddle? - person Marco Melluso; 16.01.2013
comment
Допринася добре. Той просто се опитва да реши проблема, без да добавя допълнителен div. Аз лично смятам, че е добро решение, тъй като и тук има малко. - person Erika; 25.06.2013

Долната подложка съществува, но съдържанието избутва долната подложка надолу и не се вижда поради overflow:hidden. Това, което можете да направите, е да поставите съдържанието в контейнер по следния начин:

<div style="overflow:hidden; width: 300px; height: 200px; border:1px solid #000; ">
    <div style="overflow:hidden; width:auto; height:140px; border:30px solid #ff0000;">
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
    </div>
</div>

Можете да играете с цигулката тук - http://jsfiddle.net/BMZeS/

Надявам се това да помогне.

person Sagar Patil    schedule 24.01.2012

Не мисля, че ще получите ефекта, който търсите, без да добавите 2-ро div.

http://jsfiddle.net/Mxhzf/

(добавен фонов цвят, за да стане ясно какво се случва)

HTML:

<div id="outer">
    <div id="inner">

        <!-- CONTENT HERE -->

    </div>
</div>

CSS:

#outer{
     width: 300px;  
     height: 300px; 
    padding: 20px;
}

#inner{
     width: 300px;
    height: 300px;
    overflow: hidden;
}
person James Montagne    schedule 24.01.2012

Малко закъснях с играта, но Padding изобразява вътрешното съдържание по същия начин като областта на съдържанието (това е един от начините, по които се различава от Border или Margin).

Научете повече за модела Box

Ще забележите това най-ясно, ако зададете фонови цветове или фонови изображения на div с подложка. Фоновият цвят/изображението се простира отвъд частта със съдържанието и се появява вътре в областта за подложка.

Решението е вместо това да зададете марж. или комбинация от подложка и поле (където няма подложка отдолу, а вместо това има долно поле с еднаква височина.

<div style="overflow: hidden; width: 300px; height: 100px; margin:50px;">
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
</div>

http://jsfiddle.net/Uhg38/

person isick    schedule 31.01.2014
comment
jsfiddle.net/Uhg38/6 Актуализирането на вашия jsfiddle показва, че няма подпълване срещу съдържащия div. - person InternetPanda; 29.07.2015

Ако вашият CSS използва padding-bottom и overflow:hidden заедно, това ще причини проблема, който описвате.

Най-доброто решение е:

<div style="padding: 50px; border:1px solid #000">
    <div style="overflow: hidden; width: 300px; height: 100px;">
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
        <p>Hello, this is text.</p>
    </div>
</div>

Щракнете тук за демонстрация на живо

person Dailey    schedule 02.03.2012

Наистина късен отговор, но искам да дам наистина свежо и елегантно решение с CSS. Човек може да включва ::after псевдоелементи, но по-устойчиво решение е:

    #mydiv p:last-child{
        margin-bottom:50px;
    }

ако приемем, че div може да има id или class, с които да се идентифицира. В това решение последният <p> елемент ще запълни липсващото долно пространство.

Край на вложените възли и ръчкането с HTML! Юпи!

person Nereo Costacurta    schedule 25.04.2019
comment
Ако знаете кой елемент ще бъде последен, това е най-елегантното решение, тъй като не обърква маркирането. - person Pier; 19.11.2019
comment
Иска ми се да използвам това, но не знам кои елементи ще има в моя контейнер :/ - person Ruff9; 10.02.2020

Знам, че това вече е малко старо, но наскоро имах този проблем и го поправих, като добавих допълнителен вътрешен div, който има марж.

.promo {
    height: 100px;
    width: 300px;
    border: 1px solid black;    
    padding: 0px 10px;
    overflow: hidden;
}

.inner {
    height: 86px;
    width: 100%;
    margin: 7px 0px;
    overflow: hidden;
}

.promo .inner p {
    padding 0;
    margin: 0;
}

http://jsfiddle.net/7xhuF/1/

person Tim    schedule 19.05.2014

обвийте съдържанието в div със свойство клип!!

вижте отговора на holdin @ Как мога да принудя препълване: скрито, за да не използвам моето място за подложка вдясно

person Vic    schedule 02.01.2015

Открих, че най-лесният начин е да добавя елемент между родителя и детето с

overflow:hidden;
height:100%;

http://jsfiddle.net/va78jsm5/2/

Тогава не трябваше да се притеснявам за съвпадение на височината/полето на средния елемент.

person user984003    schedule 16.10.2015

Overflow няма нищо общо с padding. Подложката е по-скоро като "вътрешна граница" в този случай. Ако искате преливането да бъде скрито, трябва да промените действителния размер на вашето поле и вместо това да използвате долно поле от 0px. Преливанията ще продължат да се показват във вашата подложка.

известен още като:

<div style="overflow: hidden; width: 300px; height: 100px; padding: 50px 50px 0 50px; margin-bottom:0px;">
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
  <p>Hello, this is text.</p>
</div>

Padding и Margins винаги вървят така в CSS: горе вдясно долу вляво (в този ред)

Ако някоя стойност е 0px, можете просто да използвате нула. като:

padding:0;

or:

padding: 0 10px 0 0;

Всяка стойност, различна от нула, трябва да бъде посочена с px, em или pt.

person jhilgert00    schedule 24.01.2012