Абсолютное положение и переполнение: скрыто


<div id="parent" style="overflow:hidden; position:relative;">
  <div id="child" style="position:absolute;">
  </div>
</div>

мне нужно показать дочерний элемент, который больше, чем родительский элемент, но без удаления overflow:hidden; это возможно? родительский элемент position:relative; дочерний элемент удаляется, как только он выходит за пределы своих родителей.

(элементы имеют дополнительные css определены я просто поставил атрибуты стиля для ясности)

6   51   2011-04-01 16:31:10

6 ответов:

совершенно невозможно делать то, что вы хотите с обоими overflow: hidden и position: relative на родительском div.. вместо этого вы можете ввести дополнительный ребенок div и движение overflow: hidden к этому.

см.:http://jsfiddle.net/thirtydot/TFTnU/

HTML:

<div id="parent">
    <div id="hideOverflow">
        <div style="width:1000px;background:#ccc">sdfsd</div>
    </div>
  <div id="child">overflow "visible"</div>
</div>

CSS:

#parent {
    position:relative;
    background:red;
    width:100px;
    height:100px
}
#child {
    position:absolute;
    background:#f0f;
    width:300px;
    bottom: 0;
    left: 0
}
#hideOverflow {
    overflow: hidden
}

приведенный ниже код работает как шарм.

<div id="grandparent" style="position:relative;">
    <div id="parent" style="overflow:hidden;">
        <div id="child" style="position:absolute;">
        </div>
    </div>
</div>

Я обычно использую overflow: hidden как clearfix. В этом случае я сдаюсь и просто добавить дополнительный див.

<div id="parent" style="position:relative;">
  <!-- floating divs here -->
  <div id="child" style="position:absolute;"></div>
  <div style="clear:both"></div>
</div>

использовать css...

* {margin: 0; padding: 0;}

#parent {width: auto; overflow: hidden;}

#child {position: absolute; width: auto;}

С помощью width auto он всегда будет добавляться к наименьшему возможному размеру; и с помощью сброса он поможет поддерживать естественный поток.

но если ребенок больше в любом случае, чем родитель, то это не будет возможно. Но с этим CSS я думаю, что вы достигнете того, что вы хотите, до максимума того, что возможно.

решение thirtydot на самом деле хорошая идея.

вот более ясный пример:http://jsfiddle.net/y9dtL68d/

HTML

<div id="grandparent">
    <div id="parent">
        <p>this has a lot of content which ...</p>
        <p>this has a lot of content which ...</p>
        <p>this has a lot of content which ...</p>
        <p>this has a lot of content which ...</p>
        <p>this has a lot of content which ...</p>
        <p>this has a lot of content which ...</p>
        <p>this has a lot of content which ...</p>
    </div>
    <div id="child">
        dudes
    </div>    
</div>

CSS

#grandparent {
    position: relative;
    width: 150px;
    height: 150px;
    margin: 20px;
    background: #d0d0d0;
}
#parent {
    width: 150px;
    height: 150px;
    overflow:hidden;
}
#child {
    position: absolute;
    background: red;
    color: white;
    left: 100%;
    top: 0;
}

Я считаю, что каждый разработчик front-end сталкивался с этой ситуацией, по крайней мере один раз. Допустим, вам нужно абсолютное положение чего-то... а затем вы пытаетесь переместить его в каком-то направлении, и бум он исчезает... вы забыли, что родитель был настроен на переполнение:скрытый и теперь ваш элемент теряется в скрытом бесконечном вакууме.Существует css трюк, чтобы сделать это.Пожалуйста, найдите ниже демонстрационный пример для него...

<br><br><br>
<div class="grand-parent">
  <div class="parent">P
    <div class="child">child</div>
  </div>
</div>
css code:


.grand-parent {
  width:50px;
  height:50px;
  position:relative;
  background-color: grey;
}
.parent {
  width:10px;
  height:30px;
  overflow:hidden;
  background-color: blue;
}
.child {
  position:absolute; 
  width:50px;
  height:20px;
  background-color: red;
  top:-10px; 
  left:5px;
}