鍍金池/ 問答/HTML/ 如何讓子元素不受父元素 overflow:auto 的影響?

如何讓子元素不受父元素 overflow:auto 的影響?

父元素固定高度并設(shè)置overflow:auto;
子元素中有個下拉框,當(dāng)里面元素足夠多(高度超出父元素高度)時,內(nèi)容被父元素遮擋
圖片描述

原諒我打碼。
我也考慮過把overflow:auto移到最外層,但是與需求還是有點區(qū)別,所以想問下有沒有更好的實現(xiàn)方法

回答
編輯回答
久礙你

簡單粗暴的例子如果是父元素固定高度,overflow:auto,當(dāng)子元素下拉框超過其父元素時并不會被遮擋。所以查找下你的代碼,看哪里是否有設(shè)置z-index或者其他之類的。

聲明一下,因為題主之前說的是select下拉框加option,所以我上面那個回答是回答他之前那個問題的,現(xiàn)在可以忽略這個回答。
--------------------------------更新分割線----------------------------------
可以設(shè)置下拉框樣式為position:fixed,然后點擊選擇時,計算該選擇器距離左邊和頂部的距離,然后賦值給模擬的下拉框的樣式來實現(xiàn)

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</head>
<style>
.table{width:500px; height:100px; overflow-y:auto; border:1px solid #000;}
*{padding:0; margin:0;}
ul li{list-style:none;}
.choose-wrap{text-align:center;}
.choose-wrap p{width: 200px; border:1px solid #000; margin:0 auto;}
.choose-list{position:fixed; width:200px; text-align:center; border:1px solid #efefef; display:none; background-color:#fff;}
</style>

<body>
    <div class="table">
        <div class="choose-wrap">
            <p onclick="showChoose();">請選擇</p>
            <ul class="choose-list">
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li>7</li>
                <li>8</li>
                <li>9</li>
            </ul>
        </div>
    </div>
    <script>
    function showChoose(){
        $('.choose-list').css({'left':$('.choose-wrap p').offset().left,'display':'block','top':$('.choose-wrap p').offset().top+$('.choose-wrap p').height()})
    }
    </script>
</body>
</html>
2018年3月21日 03:36
編輯回答
拽很帥

外層有了overflow,內(nèi)層無法脫離這個范圍,即使絕對定位也不行。

像這個地方,有個思路,因為這里的下拉是div模擬的,可以把模擬的下拉框?qū)懺谀阍O(shè)置overflow的元素外,然后點擊下拉框,把模擬下拉框的東西通過位置計算定位過來。

舉栗:

clipboard.png
這個下拉就脫離不了外層的overflow。

但是這個日期就可以:

clipboard.png

因為這個日期寫在這個overflow元素的外面(body最后),然后當(dāng)我點擊文本框,它計算位置然后把這個日期控件給定位過來顯示。

clipboard.png

2017年2月12日 22:51
編輯回答
離魂曲

寫在父元素外面,通過position: fixed;定位到你點擊你那個下面

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .box{
                width: 200px;
            }
            ul{
                overflow-y: auto;
                height: 100px;
                overflow-x: hidden;
            }
            ul li{
                position: relative;
                width: 200px;
            }
            .a{
                position: fixed;
                background: red;
                z-index: 100;
                display: none;
                width: 500px;
                height: 500px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <ul>
                <li>11111</li>
                <li>11111</li>
                <li>11111</li>
                <li>11111</li>
                <li>11111</li>
                <li>11111</li>
            </ul>
        </div>
        <div class="a">jjjjjffffffffffjj</div>
        <script>
            var list = document.querySelectorAll('li');
            var a = document.querySelector('.a')
            list.forEach(function(el){
                el.onclick=function(event){
                    a.style.display = 'block';
                    a.style.top =el.offsetTop+'px';
                    a.style.left =el.offsetLeft+el.offsetWidth/2+'px';
                }
            })
        </script>
    </body>
</html>
2018年5月16日 11:10