css - 固定定位弹窗层为何会在内容下面出现?

查看:107
本文介绍了css - 固定定位弹窗层为何会在内容下面出现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

帮刚入职的同学写一个弹窗小demo,弹窗层使用fix定位,底层只有一个a标签模拟的按钮,position为static。然而调试时按钮未能像想象中的定位在屏幕左上方,而是稍微往上偏移,点击按钮出现弹窗层也未能覆盖整个屏幕,而是在按钮下方出现如下图。小弟的代码也呈上,请各路大手指点下哪里出现了毛病?
样式表:

<style type="text/css">
    *{box-sizing:border-box;margin:0;padding: 0}
    html,body{width:100%;height: 100%;font-size: 62.5%;font-family:  Helvetica Neue, Helvetica, STHeiTi, sans-serif;}
        a.open{cursor:pointer;text-decoration: none;padding: 5px;background: #f90;border-radius:4px;text-align: center;color: #fff;font-size: 1rem;font-weight: 700;
            /*position: absolute;top: 50%;left: 50%;transform:translate(-50%,-50%);*/
        }
        .hide{display: none}
    .pop{position:fixed;z-index:999;width: 100%;height: 100%;background: rgba(0,0,0,0.3)}
    .contentbox{width: 10rem;height: 15rem;position: absolute;left: 0;top: 0;right:0;bottom: 0;margin:auto;border-radius: 6px;background: #fff;box-shadow:1px 1px 8px rgba(0,0,0,0.2),-1px -1px 8px rgba(0,0,0,0.2);}
    .content{width: 100%;height: 100%;position: relative;padding: 1rem;font-size: 1rem}
    .close{position: absolute;right: 0;top: 0;cursor: pointer;
        transform:translate(50%,-50%);
        -webkit-transform:translate(50%,-50%);
        -ms-transform:translate(50%,-50%);
        -o-transform:translate(50%,-50%);
        -moz-transform:translate(50%,-50%);
        width: 1.5rem;height: 1.5rem;border: 2px solid #f8f8f8;border-radius: 100%;text-align: center;background: #ddd}
            @media all and (min-width: 320px) {
                html{font-size:100%}
            }
            @media all and (min-width: 360px) {
                html{font-size:112.5%}
            }
            @media all and (min-width: 384px) {
                html{font-size:120%}
            }
            @media all and (min-width: 414px) {
                html{font-size:130%}            
            }
    </style>

结构及脚本:

<body>
<a href="javascript:;" class="open">打开弹窗</a>
    <div class="pop hide" >
        <div class="contentbox">
            <div class="contentbox">
                <div class="content">
                    测试测试测试测试测试测试测试测试测试测试测试测试测试测试
                    <div class="close" ></div>
                </div>
            </div>
        </div>
    </div>
    <script type="text/javascript">
    var pop=document.querySelector('.pop'),
        btn=document.querySelector('.open'),
        close=document.querySelector('.close');
    btn.addEventListener('click',function(e){_open(e)},false);
    close.addEventListener('click',function(e){_close(e)},false);
    function _open(event){
        event.preventDefault();
        console.log(1);
        pop.setAttribute('class','pop');
    }
    function _close(event){
        event.preventDefault();
        console.log(2);
        pop.setAttribute('class','pop hide');
    }
    </script>
</body>


感激不尽!

解决方案

彈窗層覆蓋不完全

.pop {
    position: fixed;
    z-index: 999;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.3)
}

按鈕跑出去一點點

因為你是使用 <a>,這預設是 inline Elementinline 的元素有個特性是其 padding-toppadding-bottom 不會去推擠別的元素,而是覆蓋上去,所以當你在左上角時,他並沒有去推擠最外面的視窗,而是延伸出去(覆蓋),你只要把 <a> 設為 inline-block 就可以解決這個問題。


a.open {
    display: inline-block;
    cursor: pointer;
    text-decoration: none;
    padding: 5px;
    background: #f90;
    border-radius: 4px;
    text-align: center;
    color: #fff;
    font-size: 1rem;
    font-weight: 700;
    /*position: absolute;top: 50%;left: 50%;transform:translate(-50%,-50%);*/
}

这篇关于css - 固定定位弹窗层为何会在内容下面出现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆