绝对定位会影响overflow的效果和导航栏的制作详解(复制代码观看效果)

29 篇文章 18 订阅
28 篇文章 0 订阅
overflow和绝对定位会使overflow的属性失效

        绝对定位会使其脱离文档流的  绝对定位的元素不总是被父级
        overflow属性裁剪,尤其当overflow在绝对定位元素及其包含块之间的时候
        
        解决方法
        1,overflow元素自身为包含块.
*      *2,overflow远古三的子元素为包含块  //下面用的这个
        3,任意合法突然transform申明当做包含块

下面是侧边栏的代码,包含解决这一问题的代码

<!DOCTYPE html <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>侧边栏
</title>
<style type="text/css">
    #div1 {
        width: 200px;
        height: 400px;
        background: #999999;
        /* overflow和绝对定位会使overflow的属性失效

        绝对定位会使其脱离文档流的  绝对定位的元素不总是被父级
        overflow属性裁剪,尤其当overflow在绝对定位元素及其包含块之间的时候
        
        解决方法
        1,overflow元素自身为包含块.
*      *2,overflow远古三的子元素为包含块  //下面用的这个
        3,任意合法突然transform申明当做包含块
        */
        position:absolute;
        /* position:relative; 
        如果这个侧边栏使用相对定位的话
        那么只要鼠标移到这个div上它就会一直不停的移动显然是不可的
        所以只能用绝对定位
        
        */
        left: -200px;
        top: 120px;
        border-radius: 0px 10px 10px 0px;
        color: #c23531;
        /* display: inline-block; */

        /* 滚动条*/
        /* overflow:auto; */
        /* overflow:scroll; */
        /* overflow: hidden; */
    }
   #div2
   {
    width: 200px;
    height: 400px;  
    overflow:auto;
   }

   #qiye1, #qiye2, #qiye3, #qiye4, #qiye5, #qiye6, #qiye7, #qiye8, #qiye9, #qiye10, #qiye11, #qiye12,#qiye13,#qiye14
   {
    border-top:1px solid rgb(153, 114, 30);
   }
   p{ line-height:10px} 
   #changsha
   {
    position:relative;
    left:500px;
   color:black;
   }
    span {
        width: 20px;
        height: 50px;
        line-height: 23px;
        /* 行高 */
        background: #999999;
        /* position:relative; */
        position: absolute;
        /* float: left; */
        left: 200px;
        top: 180px;
        border-radius: 0px 5px 5px 0px;
        border-top:1px solid rgb(153, 114, 30);
    }
</style>
<!-- 
<script>
    window.onload = function () {
        var odiv = document.getElementById('div1');
        odiv.onmouseover = function () {

            startmove(0, 10);//第一个参数为div  left属性的目标值  第二个为 每次移动多少像素

        }
        odiv.onmouseout = function () {
            startmove(-200, -10);
        }
    }

    var timer = null;
    function startmove(target, speed) {

        var odiv = document.getElementById('div1');
        clearInterval(timer);
        timer = setInterval(function () {
            // offsetLeft, 返回当前元素的相对水平偏移位置的偏移容器.
            if (odiv.offsetLeft == target) {
                clearInterval(timer);
            }
            else {
                odiv.style.left = odiv.offsetLeft + speed + 'px';
            }

        }, 20)
    }
//点击一个div另一个div产生反应
    var click_divs = document.getElementById("qiye1");
    var show_divs = document.getElementById("changsha");
    click_divs.onclick=function()
    {
        show_divs.style.display="block";
    }
</script> --> 
</head>

<body>
    <div id="div1">
        <!-- 加了div2使得overflow变得有效了 -->
        <div id="div2">
                <div id="qiye1"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye2"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye3"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye4"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye5"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye6"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye7"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye8"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye9"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye10"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye11"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye12"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
                <div id="qiye13"><p>企业名称:长沙</p><p> 企业位置:(112,28)</p></div>
        </div>
        <span>公司</span>
    </div>
    <div id="changsha">
        长沙
    </div>

</body>

</html>
<!-- <style type="text/css">
    #div1 {
        width: 200px;
        height: 400px;
        background: #999999;
        /* overflow和绝对定位会使overflow的属性失效

        绝对定位会使其脱离文档流的  绝对定位的元素不总是被父级
        overflow属性裁剪,尤其当overflow在绝对定位元素及其包含块之间的时候
        
        解决方法
        1,overflow元素自身为包含块.
*      *2,overflow远古三的子元素为包含块  //下面用的这个
        3,任意合法突然transform申明当做包含块
        */
        position:absolute;
        /* position:relative; 
        如果这个侧边栏使用相对定位的话
        那么只要鼠标移到这个div上它就会一直不停的移动显然是不可的
        所以只能用绝对定位
        
        */
        left: 0px;
        top: 120px;
        border-radius: 0px 10px 10px 0px;
        color: #c23531;
        /* display: inline-block; */

        /* 滚动条*/
        /* overflow:auto; */
        /* overflow:scroll; */
        /* overflow: hidden; */
    }
   #div2
   {
    width: 200px;
    height: 400px;  
    overflow:auto;
   }

   #changsha
   {
    position:relative;
    left:500px;
    /* display: none; */
   }
    span {
        width: 20px;
        height: 50px;
        line-height: 23px;
        /* 行高 */
        background: #999999;
        /* position:relative; */
        position: absolute;
        /* float: left; */
        left: 200px;
        top: 180px;
        border-radius: 0px 5px 5px 0px;
    }
</style> -->
<script>
    window.onload = function () {
        var odiv = document.getElementById('div1');
        odiv.onmouseover = function () {

            startmove(0, 10);//第一个参数为div  left属性的目标值  第二个为 每次移动多少像素

        }
        odiv.onmouseout = function () {
            startmove(-200, -10);
        }
    }

    var timer = null;
    function startmove(target, speed) {

        var odiv = document.getElementById('div1');
        clearInterval(timer);
        timer = setInterval(function () {
            // offsetLeft, 返回当前元素的相对水平偏移位置的偏移容器.
            if (odiv.offsetLeft == target) {
                clearInterval(timer);
            }
            else {
                odiv.style.left = odiv.offsetLeft + speed + 'px';
            }

        }, 20)
    }
//点击一个div另一个div产生反应
    var click_divs = document.getElementById("qiye1");
    var show_divs = document.getElementById("changsha");
    click_divs.onclick=function()
    {
        if(show_divs.style.color!="red")
        {
            show_divs.style.color="red";
            show_divs.style.fontWeight = "Bold";
        }
        else
        {
            show_divs.style.color="black"
            show_divs.style.fontWeight = "Normal";
        }
        
    }    
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值