2009-03-05 14 views
6

私は、このpageに概説されている等高線CSSトリックを使用しています。要素が "overflow:hidden"要素内にあるときに要素が切断されるのを避ける

今日まで、流れの中から抜け出すために絶対的に配置されている列の1つの中にダイアログボックスを追加する必要があるときまで、すべてうまくいきました。問題は、コンテナに「オーバーフロー:非表示」があるため、オーバーフロー時にダイアログが切断されていることです。

ダイアログボックスをコンテナ要素の外に持ってくるのとは別に、CSSを使って表示する方法はありますか?

ここに私が言及したことを示す小さな例があります。あなたはそれがdiv.container要素に溢れたときdiv#div-bが上部で切断されていることがわかり

<style> 
.container { overflow: hidden; margin-top: 30px } 
.col { 
    float: left; 
    padding-bottom: 2000px; 
    margin-bottom: -2000px; 
    border-right: 1px solid black; 
    width: 100px; 
    background-color: grey; 
} 
.col.third { border-right: none } 

#div-a { position: relative } 
#div-b { 
    position: absolute; 
    background-color: red; 
    width: 35px; 
    height: 350px; 
    bottom: 0; 
    right: 0; 
    margin: 5px; 
    border: 2px solid black; 
} 
</style> 

<div class="container"> 
    <div class="col first"> 
     <p style="height: 100px">One</p> 
    </div> 
    <div class="col second"> 
     <p style="height: 300px">Two</p> 
     <div id="div-a"> 
      <!-- this gets cut off by the "overflow: hidden" on div.container --> 
      <div id="div-b"> 
       Foo 
      </div> 
     </div> 
    </div> 
    <div class="col third"> 
     <p style="height: 200px">Three</p> 
    </div> 
</div> 

答えて

3

残念ながら、コンテナ要素の外にダイアログを表示しなければ、あなたがしたいことは不可能です。

あなたの最善の策は、ダイアログエレメントをコンテナの兄弟にして、そのように配置することです。

1

残念ながら...私はオーバーフローを回避する方法はないと思います。絶対的な位置で隠されています。あなたはポジション:固定で実験することができますが、それを使用する場合は全く同じ条件でポジショニングすることはありません。

1

1つのオプションは、オーバーフロー:隠しコンテナの内容をサブコンテナ(おそらく子div)に配置することです。次に、サブコンテナをコンテナの寸法と一致させ、コンテナからサブコンテナに隠されたオーバーフロー:を移動させます。

次に、ダイアログをコンテナの子(サブコンテナの兄弟)にすることができます。オーバーフロー:非表示の要素にはダイアログが存在します。

私はこれをテストしておらず、コンテナから隠されたオーバーフロー:隠しを削除するとデザインが壊れる可能性があります。そのような場合は、他の人が持っているようにして、コンテナの外にあるダイアログボックスを完全に移動することをお勧めします。ダイアログボックスのコードを他の場所に置くことができない場合は、Javascriptを使用してこれを行うこともできます。 (Javascriptを使用すると、ダイアログボックスがBODYや他のタグの子を表示する必要がある場合に表示されます)

関連する問題