为达到这种布局,且是响应式(即随着移动端的变化,元素大小也相应变化)。
有以下四种方法:
- flex 布局(flex:25%)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } ul { list-style: none; display: flex; flex-wrap: wrap; } li { height: 60px; margin: 20px 0; flex: 25%; } div { width: 60px; height: 60px; margin: 0 auto; background-color: pink; border-radius: 20px; } </style> </head> <body> <ul> <li> <div></div> </li> <li> <div></div> </li> <li> <div></div> </li> <li> <div></div> </li> <li> <div></div> </li> <li> <div></div> </li> <li> <div></div> </li> <li> <div></div> </li> </ul> </body> </html>
- rem + 媒体查询(根据查询设备大小,来相应改变html: font-size ==> 随后,其他标签里的样式用rem 做单位)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 假设UI稿的尺寸是750px,此时每个元素的大小是120px*120px
750 / 10 == 75px :把屏幕分成10等分,120里面有多少个10等分
120/ 75 => 此时元素的尺寸
*/
* {
margin: 0;
padding: 0;
}
/*媒体查询*/
/*当页面大于1200px 时,大屏幕,主要是PC 端*/
@media (min-width: 1200px) {
html {
font-size: 120px;
}
}
/*在992 和1199 像素之间的屏幕里,中等屏幕,分辨率低的PC*/
@media (min-width: 992px) and (max-width: 1199px) {
html {
font-size: 90px;
}
}
/*在768 和991 像素之间的屏幕里,小屏幕,主要是PAD*/
@media (min-width: 768px) and (max-width: 991px) {
html {
font-size: 75px;
}
}
/*在480 和767 像素之间的屏幕里,超小屏幕,主要是手机*/
@media (min-width: 480px) and (max-width: 767px) {
html {
font-size: 48px;
}
}
/*在小于480 像素的屏幕,微小屏幕,更低分辨率的手机*/
@media (max-width: 479px) {
html {
font-size: 48px;
}
}
ul {
list-style: none;
}
li {
width: 25%;
height: 1.6rem;
float: left;
margin: 0.53rem 0;
}
div {
width: 1.6rem;
height: 1.6rem;
margin: 0 auto;
background-color: blueviolet;
border-radius: 0.53rem;
}
</style>
</head>
<body>
<ul>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
</ul>
</body>
</html>
3.rem+flexible.js
这里假如ui稿为750px ,盒子大小为120px
750/10 = 120 / x x设置为rem,那么当750 变化时(响应式),这里用到html 的font-size ,flexible.js就是自动获取视口宽度,并且/10
所以公式变为: (视口宽度/ 10)(html 的font-size) * x = 120盒子要自适应的宽度
逻辑是这样
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.2/??flexible_css.js,flexible.js"></script>
<style>
/* 假设UI稿的尺寸是750px,此时每个元素的大小是120px*120px
750 / 10 == 75px :把屏幕分成10等分
这里:
750px == 10rem
75px == 1rem
750 / 10 == 75px == 10rem/10 == 1rem
750 == 10 rem
那120 有多少rem
750 / 10 == 120 / x
x == 120 / 75
其实就是看占的比例,比例是一直不会变的
flexible.html 里会去获取屏幕宽度,然后设置html font-size :屏幕宽度/10 == 1 rem
这样无论屏幕宽度是多少,都会划分成10 等分,然后乘以比例就是他应该自适应的宽度
*/
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
li {
width: 25%;
height: 1.6rem;
float: left;
margin: 0.53rem 0;
}
div {
width: 1.6rem;
height: 1.6rem;
margin: 0 auto;
background-color: blueviolet;
border-radius: 0.53rem;
}
</style>
</head>
<body>
<ul>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
</ul>
</body>
</html>
4.rem + vw
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 假设UI稿的尺寸是750px,此时每个元素的大小是120px*120px
750 / 10 == 75px :把屏幕分成10等分,120里面有多少个10等分
120/ 75 => 此时元素的尺寸
750 / 10 == 120 / x
x = 占ui稿的比例
假设x 为 20
20rem * 10vw == 它应该自适应的屏幕宽度
*/
* {
margin: 0;
padding: 0;
}
html {
/* 100vw 就是屏幕宽度,这里html:font-size:10vw 就是将屏幕分成10 等分 */
/* 这里也是 屏幕宽度 / 10 */
font-size: 10vw;
}
ul {
list-style: none;
}
li {
width: 25%;
height: 1.6rem;
float: left;
margin: 0.53rem 0;
}
div {
width: 1.6rem;
height: 1.6rem;
margin: 0 auto;
background-color: blueviolet;
border-radius: 0.53rem;
}
</style>
</head>
<body>
<ul>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
<li>
<div></div>
</li>
</ul>
<script>
</script>
</body>
</html>