2016-08-23 6 views
0

私は要素にドロップダウンを持つモダンを持っています。ドロップダウンで親のオーバーフローを無視する

問題はオーバーフローが設定されているため、ドロップダウンが表示されますが、モーダルの上に表示されません。私はオーバフローを設定しているので、それは理解しています。

私は親を無視し、 "モーダル"の上にドロップダウンを表示する方法はありますか?

この例では、スクロールすると赤い線の内容が表示されます。現時点では私のコードに基づいて予想される動作です。モーダルの上にドロップダウンが表示されるように調整する必要はありますか?

z-indexで修正しようとしましたが、SOのどこかを読んで、祖父母を相対位置に設定しました。

CSSのみの解決策を推奨します。

ありがとうございます!

.w-100 { 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 

 
.h-100 { 
 
    width: 100%; 
 
    height: 100%: 
 
} 
 

 
.modal-overlay { 
 
    height: 100%; 
 
    width: 100%; 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    display: block; 
 
    z-index: 65; 
 
    padding-top: 100px; 
 
    overflow: auto; 
 
    background-color: rgba(0,0,0,.6); 
 
} 
 

 
.modal-small { 
 
    max-width: 600px; 
 
    width: 40%; 
 
    margin: 0 auto; 
 
    float: none; 
 
    display: block; 
 
    position: relative; 
 
    background-color: #fff; 
 
    padding: 0; 
 
} 
 

 
.container { 
 
    min-height: 120px; 
 
    max-height: 400px; 
 
    overflow: auto; 
 
    padding: 15px; 
 
} 
 

 
.element-container { 
 
    height: 100px; 
 
    width: 100%; 
 
    display: inline-block; 
 
    padding: 10px; 
 
    margin-bottom: 10px; 
 
    position: relative; 
 
} 
 

 
.element-flex-container { 
 
    display: flex; 
 
    align-items: center; 
 
    height: 100%; 
 
    padding: 5px 15px; 
 
    border-radius: 2px; 
 
    border-bottom: 3px solid rgba(0,0,0,.1); 
 
    border-left: 1px solid rgba(0,0,0,.1); 
 
    border-right: 1px solid rgba(0,0,0,.1); 
 
    border-top: 1px solid rgba(0,0,0,.1); 
 
} 
 

 
.avatar { 
 
    height: 32px; 
 
    width: 32px; 
 
    border-radius: 100%; 
 
    margin-right: 10px; 
 
} 
 

 
.flex-1 { 
 
    flex: 1; 
 
} 
 

 
.dropdown-width { 
 
    text-align: right; 
 
    width: 100px; 
 
} 
 

 
.dropdown-container { 
 
    display: inline; 
 
    position: relative; 
 
} 
 

 
.toggle-dropdown { 
 
    color: #4caf50 
 
} 
 

 
.dropdown { 
 
    position: absolute; 
 
    border: 1px solid red; 
 
    left: auto; 
 
    right: 0; 
 
    width: 120px; 
 
    display: block; 
 
    background-color: #fff; 
 
    z-index: 10; 
 
    margin-bottom: 20px; 
 
    padding: 0; 
 
}
<div class="modal-overlay"> 
 
    <div class="modal-small"> 
 
    <div class="w-100 h-100"> <!-- this is since I inject an ui-view --> 
 
     <div class="w-100 h-100"> <!-- this is since I inject an ui-view --> 
 
     <div class="container"> 
 
      
 
      <!-- Repeat of elements --> 
 
      <div class="element-container"> 
 
      <div class="element-flex-container"> 
 
       <img src="http://images.freeimages.com/images/previews/7ab/chrysanthemum-3-1621562.jpg" class="avatar" /> 
 
       <div class="flex-1"> 
 
       Something here 
 
       </div> 
 
       <div class="dropdown-width"> 
 
       <div class="dropdown-container"> 
 
        <div class="toggle-dropdown"> 
 
        Toggle 
 
        </div> 
 
        <div class="dropdown"> 
 
        Something here 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        </div> 
 
       </div> 
 
       </div> 
 
      </div> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

答えて

1

ドロップダウン要素position: fixed、ドロップダウンコンテナpositon: absolute、これが機能するために親position:relativeを作成する必要があります。上、右、左、下を使用してコンテナ要素の位置を調整できますが、固定要素に負のマージンを使用する必要があります。

.w-100 { 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 

 
.h-100 { 
 
    width: 100%; 
 
    height: 100%: 
 
} 
 

 
.modal-overlay { 
 
    height: 100%; 
 
    width: 100%; 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    display: block; 
 
    z-index: 65; 
 
    padding-top: 100px; 
 
    overflow: auto; 
 
    background-color: rgba(0,0,0,.6); 
 
} 
 

 
.modal-small { 
 
    max-width: 600px; 
 
    width: 40%; 
 
    margin: 0 auto; 
 
    float: none; 
 
    display: block; 
 
    position: relative; 
 
    background-color: #fff; 
 
    padding: 0; 
 
} 
 

 
.container { 
 
    min-height: 120px; 
 
    max-height: 400px; 
 
    overflow: auto; 
 
    padding: 15px; 
 
} 
 

 
.element-container { 
 
    height: 100px; 
 
    width: 100%; 
 
    display: inline-block; 
 
    padding: 10px; 
 
    margin-bottom: 10px; 
 
    position: relative; 
 
} 
 

 
.element-flex-container { 
 
    display: flex; 
 
    align-items: center; 
 
    height: 100%; 
 
    padding: 5px 15px; 
 
    border-radius: 2px; 
 
    border-bottom: 3px solid rgba(0,0,0,.1); 
 
    border-left: 1px solid rgba(0,0,0,.1); 
 
    border-right: 1px solid rgba(0,0,0,.1); 
 
    border-top: 1px solid rgba(0,0,0,.1); 
 
} 
 

 
.avatar { 
 
    height: 32px; 
 
    width: 32px; 
 
    border-radius: 100%; 
 
    margin-right: 10px; 
 
} 
 

 
.flex-1 { 
 
    flex: 1; 
 
} 
 

 
.dropdown-width { 
 
    text-align: right; 
 
    width: 100px; 
 
} 
 

 
.dropdown-container { 
 
    display: inline; 
 
    position: absolute; 
 
    top: 0; 
 
    right:0; 
 
} 
 

 

 
.toggle-dropdown { 
 
    color: #4caf50 
 
} 
 

 
.dropdown { 
 
    position: fixed; 
 
    border: 1px solid red; 
 
    width: 120px; 
 
    display: block; 
 
    background-color: #fff; 
 
    z-index: 10; 
 
    margin-bottom: 20px; 
 
    padding: 0; 
 
    
 
}
<div class="modal-overlay"> 
 
    <div class="modal-small"> 
 
    <div class="w-100 h-100"> <!-- this is since I inject an ui-view --> 
 
     <div class="w-100 h-100"> <!-- this is since I inject an ui-view --> 
 
     <div class="container"> 
 
      
 
      <!-- Repeat of elements --> 
 
      <div class="element-container"> 
 
      <div class="element-flex-container"> 
 
       <img src="http://images.freeimages.com/images/previews/7ab/chrysanthemum-3-1621562.jpg" class="avatar" /> 
 
       <div class="flex-1"> 
 
       Something here 
 
       </div> 
 
       <div class="dropdown-width"> 
 
       <div class="dropdown-container"> 
 
        <div class="toggle-dropdown"> 
 
        Toggle 
 
        </div> 
 
        <div class="dropdown"> 
 
        Something here 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        </div> 
 
       </div> 
 
       </div> 
 
      </div> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

ありがとう!ただし、オーバーフローが開始された要素が複数ある場合、ページ読み込み時に計算されるため、ソリューションは機能しません。 –

0

あなたは、ドロップダウンCSSで使用されるZインデックス999、および位置を必要とします。 例:

.w-100 { 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 

 
.h-100 { 
 
    width: 100%; 
 
    height: 100%: 
 
} 
 

 
.modal-overlay { 
 
    height: 100%; 
 
    width: 100%; 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    display: block; 
 
    z-index: 65; 
 
    padding-top: 100px; 
 
    overflow: auto; 
 
    background-color: rgba(0,0,0,.6); 
 
} 
 

 
.modal-small { 
 
    max-width: 600px; 
 
    width: 40%; 
 
    margin: 0 auto; 
 
    float: none; 
 
    display: block; 
 
    position: relative; 
 
    background-color: #fff; 
 
    padding: 0; 
 
} 
 

 
.container { 
 
    min-height: 120px; 
 
    max-height: 400px; 
 
    overflow: auto; 
 
    padding: 15px; 
 
} 
 

 
.element-container { 
 
    height: 100px; 
 
    width: 100%; 
 
    display: inline-block; 
 
    padding: 10px; 
 
    margin-bottom: 10px; 
 
    position: relative; 
 
} 
 

 
.element-flex-container { 
 
    display: flex; 
 
    align-items: center; 
 
    height: 100%; 
 
    padding: 5px 15px; 
 
    border-radius: 2px; 
 
    border-bottom: 3px solid rgba(0,0,0,.1); 
 
    border-left: 1px solid rgba(0,0,0,.1); 
 
    border-right: 1px solid rgba(0,0,0,.1); 
 
    border-top: 1px solid rgba(0,0,0,.1); 
 
} 
 

 
.avatar { 
 
    height: 32px; 
 
    width: 32px; 
 
    border-radius: 100%; 
 
    margin-right: 10px; 
 
} 
 

 
.flex-1 { 
 
    flex: 1; 
 
} 
 

 
.dropdown-width { 
 
    text-align: right; 
 
    width: 100px; 
 
} 
 

 
.dropdown-container { 
 
    display: inline; 
 
    position: relative; 
 
} 
 

 
.toggle-dropdown { 
 
    color: #4caf50 
 
} 
 

 
.dropdown { 
 
    position: relative; 
 
    z-index: 9999; 
 
    border: 1px solid red; 
 
    left: auto; 
 
    right: 0; 
 
    width: 120px; 
 
    display: block; 
 
    background-color: #fff; 
 
    z-index: 10; 
 
    margin-bottom: 20px; 
 
    padding: 0; 
 
}
<div class="modal-overlay"> 
 
    <div class="modal-small"> 
 
    <div class="w-100 h-100"> <!-- this is since I inject an ui-view --> 
 
     <div class="w-100 h-100"> <!-- this is since I inject an ui-view --> 
 
     <div class="container"> 
 
      
 
      <!-- Repeat of elements --> 
 
      <div class="element-container"> 
 
      <div class="element-flex-container"> 
 
       <img src="http://images.freeimages.com/images/previews/7ab/chrysanthemum-3-1621562.jpg" class="avatar" /> 
 
       <div class="flex-1"> 
 
       Something here 
 
       </div> 
 
       <div class="dropdown-width"> 
 
       <div class="dropdown-container"> 
 
        <div class="toggle-dropdown"> 
 
        Toggle 
 
        </div> 
 
        <div class="dropdown"> 
 
        Something here 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        <br /> 
 
        Something else 
 
        </div> 
 
       </div> 
 
       </div> 
 
      </div> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

あなたは、使用済みのZインデックス999、および位置を必要とする:D –

+0

は、[編集]あなたの答えを行うと、何が変わるとその理由を明記してください。それははるかに良い答えになります。詳細については、[回答]を参照してください。 –

+0

マイクさん、ありがとう。 –

関連する問題