javascript - 设置六个div的宽度为网页宽度/6,第六个会换行
大家讲道理
大家讲道理 2017-04-11 10:35:23
[JavaScript讨论组]

我的目标: 获取网页宽度、高度。 动态生成18个p块,高度为网页高度/3,宽度为网页宽度/6。

HTML:



    
        demo
        
        
    
    
        
    

JS:

var sW = document.body.clientWidth;

var sH = document.body.clientHeight;


function cre(){
    let pose = document.createElement("p");

    pose.setAttribute("class","ap");
    
    pose.setAttribute("style","display:inline-block");

    pose.style.height=sH/3+"px";

    pose.style.width=sW/6+"px";
        

    document.body.appendChild(pose);
}


function firstPose(){
    for(let i=0; i<18 ; i++  ){
        
            setTimeout(cre(),300);
        
            if(i==5||i==11||i==17){

                document.body.appendChild(document.createElement("br"));
            }
            
        }
    }


window.onload=firstPose();

CSS:

html{
    height: 100%;
    width: 100%;
}
body{
    height: 100%;
    width: 100%;
    margin: auto;
    line-height: 10px;
}

.ap{
    background: black;
    margin: 0;
    padding: 0;
}



.ap:hover{
    opacity: 0;
}

效果图:

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(6)
高洛峰

不用大动干戈...

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .item{
            float: left;
            overflow: hidden;
            width: 16.6vw;
            height: 33vh;
            box-sizing: border-box;
            border: 2px solid salmon;
            background: yellowgreen;
        }
    </style>
</head>
<body>
<script>
    document.body.innerHTML=new Array(18)
        .fill(null)
        .map(()=>'<p class="item"></p>')
        .join('')
</script>
</body>
</html>

jsfiddle

黄舟

/3, /6 出现换行或者纵向滚动条 应该是因为小数点的问题,毕竟 px 的最小单位是 1

可以尝试前面几行/列的值向上取整,最后一行/列使用总值减其他行/列和;

-- 不过不建议这样,毕竟窗口宽度会变化,那你还得监听 resize 重新计算赋值。

最好是直接在 CSS 中使用 %:

html, body { height: 100%; margin: 0; padding: 0;}
.item { height: 33.33333%; width: 16.66666%;}

-- 自己测试一下哈。 --

如下,加了个随机背景颜色

或者对兼容性要求不高的话,建议使用楼上的 vh.

大家讲道理

不建议使用vh vw, 兼容性不好.
直接用百分比即可, 而且百分比是基于上层容器的宽度.
vh vw, v是什么含义?(我不是在问问题, 自行百度思考一下)

比如说有一个局部的组件去开发, 平行4个等宽的p去呈现头像, 也用vw?

黄舟

有一个问题楼上也说到了,v既然是viewport,那么他的大小是可视化区域的大小,如果想在父级元素下面进行等比划分的话,使用vh,vw是不行的,因为不是相对于父级元素,而是相对于可视区域。

阿神

demo

怪我咯

题主 告诉你个最简单的解决办法吧 p设置display=“inline-block”的时候会自带一个默认大小的间隔 font-size=“0”就能解决 不过唯一的缺陷就是:p填充内容的话要单独设置font-size。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号