九宫格自适应布局的页面重构

为什么要这么“作死”

本文使用JS方法,对之前本来比较简单的九宫格布局方法,进行了“暴力”重构
代码主要的构思
1.毋庸置疑,第一步,在meta中设定显示宽度为设备的宽度,缩放比例为1:1。
2.要想实现页面的高为100%,因页面存在继承属性,html继承了浏览器的高度,因此需要在设置盒子的高度为100%之前,设置html和body的高度为100%,才能实现子盒子的高度为100%。
3.最开始我的考虑是实现宽高为100%,然后子盒子再继续以百分比进行设置,虽然实现了九宫格,但是页面实在是太吃藕了,所以思考着添加JS方法,对页面进行重构。

使用JS方法的重构思路

1.获取浏览器的宽度
2.比较大盒子的宽高,并取出宽高中较小的值,并将较小值赋值给大盒子的宽和高,这就实现了大盒子是个正方形且刚刚好接近覆盖整个页面。
3.此时的页面靠左,因此需考虑一个办法将页面居中,这里面再次使用了“暴力”方法进行了居中,居中方式如下:

1
con.style.marginLeft=cWidth/2-con.offsetWidth/2+'px';

即是将浏览器宽度减去大盒子宽度除二,便是左边的margin的宽度啦。
4.对小盒子进行设置,小盒子的宽高是相对大盒子的,这就比较好设置了,进行遍历,设置它们的宽高相等就好啦。
PIC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Nine-Block Layout</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<style>
*{
margin: 0;
padding: 0;
}
html,body{
width: 100%;
height: 100%;
}
.container{
height:100%;
width: 100%;
}
.box{
height:29%;
width: 29%;
background: #ff0;
float:left;
margin:2%;
border-radius: 10px;
}
</style>
<script>
window.onload=function(){

var con=document.getElementsByClassName('container')[0]; //获取容器
var box=document.getElementsByClassName('box'); //获取小盒子
//console.log(con.offsetHeight>con.offsetWidth);
var cWidth=document.body.clientWidth; //设置cWidth值为屏幕宽度
//console.log(cWidth)
function compare(){ //比较大盒子宽高大小,取小值
if (con.offsetHeight>con.offsetWidth) {
return con.offsetWidth;
} else {
return con.offsetHeight;
}}
con.style.height=con.style.width=compare()+'px'; //将大盒子的宽高设置为较小值
con.style.marginLeft=cWidth/2-con.offsetWidth/2+'px'; //将坐外边距设置为屏幕宽减去大盒子宽度的一半
//console.log(con.style.width);
//console.log(con.style.height);
for (var i = 0; i < box.length; i++) { //将小盒子的宽高设为相等
box[i].style.width=box[0].offsetHeight+'px';

}


}

</script>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</body>
</html>
文章目录
  1. 1. 为什么要这么“作死”
  2. 2. 使用JS方法的重构思路
|