栅格布局

122 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>仿bootstrap栅格布局</title>
		<style>
			/*1*/
			* {
				/*1start 盒子大小计算方式。被定义的元素的内边距和边框不再会增加它的宽度,
				不加入的话排版会有问题 */
				box-sizing: border-box;
				-moz-box-sizing: border-box;
				/* Firefox浏览器特有属性 针对火狐起作用 */
				-webkit-box-sizing: border-box;
				/*1end*/
			}

			/*2设置容器 目的:随着屏幕增大,container宽度变大*/
			/*移动优先 默认Extra small <576px 超小设备*/
			/*默认针对超小设备*/
			.container {
				width: 100%;
				/* 2.1 设置padding确保内容左右留白*/
				padding-right: 15px;
				padding-left: 15px;
				/*2.2 start 设置为水平居中*/
				margin-right: auto;
				margin-left: auto;
				/*2end*/
			}

			/*针对 Small 平板 &ge;576px*/
			@media screen and (min-width: 576px) {
				.container {
					max-width: 540px;
				}
			}

			/*针对 Medium 桌面显示器 &ge;768px*/
			@media screen and (min-width: 768px) {
				.container {
					max-width: 720px;
				}
			}

			/*针对 Large 大桌面显示器 &ge;992px*/
			@media screen and (min-width: 992px) {
				.container {
					max-width: 960px;
				}
			}

			/*Extra large 超大桌面显示器 &ge;992px*/
			@media screen and (min-width: 1200px) {
				.container {
					max-width: 1140px;
				}
			}

			/*3设置行 弹性布局容器 采用flex布局*/
			.row {
				/*3.1start 负值margin为了抵消container的padding,因为col有留白*/
				margin-right: -15px;
				margin-left: -15px;
				/*3.1end*/
				/*3.2 弹性布局容器*/
				display: flex;
				/*3.3 换行结构 列宽超过 换行显示*/
				flex-wrap: wrap;
			}

			/*4 设置列 针对所有设备*/
			/*4.1设置列内边距15px*/
			.row div {
				padding: 15px;
			}

			/*4.2 设置等分列 样式*/
			.col {
				flex: 1;
			}

			/*4.3 设置列的跨度(列)*/
			.col-1 {
				/* 设置flex行为*/
				/* flex: flex-grow, flex-shrink, flex-basis*/
				/* flex-grow: 项目的放大比例,默认为0,即如果存在剩余空间,也不放大*/
				/* flex-shrink: 项目的缩小比例,默认为1,如果空间不足,则该项目缩小,若为0,则不缩小.*/
				/* flex-basis: <length> | auto; 默认为auto,即项目本来大小,可设置长度*/
				flex: 0 0 8.33333333%;
				/* 父级元素宽度百分比*/
				max-width: 8.33333333%;
			}

			.col-2 {
				flex: 0 0 16.66666667%;
				max-width: 16.66666667%;
			}

			.col-3 {
				flex: 0 0 25%;
				max-width: 25%;
			}

			.col-4 {
				flex: 0 0 33.33333333%;
				max-width: 33.33333333%;
			}

			.col-5 {
				flex: 0 0 41.66666667%;
				max-width: 41.66666667%;
			}

			.col-6 {
				flex: 0 0 50%;
				max-width: 50%;
			}

			.col-7 {
				flex: 0 0 58.33333333%;
				max-width: 58.33333333%;
			}

			.col-8 {
				flex: 0 0 66.66666667%;
				max-width: 66.66666667%;
			}

			.col-9 {
				flex: 0 0 75%;
				max-width: 75%;
			}

			.col-10 {
				flex: 0 0 83.33333333%;
				max-width: 83.33333333%;
			}

			.col-11 {
				flex: 0 0 91.66666667%;
				max-width: 91.66666667%;
			}

			.col-12 {
				flex: 0 0 100%;
				max-width: 100%;
			}

			/*4.4 针对不同的设备写列的样式(宽度) 小屏幕显示为2列 平板显示3列  在大屏幕显示为多列6*/
			/*针对 Small 平板 &ge;576px*/
			@media screen and (min-width: 576px) {
				.col-sm-1 {
					flex: 0 0 8.33333333%;
					/* 父级元素宽度百分比*/
					max-width: 8.33333333%;
				}

				.col-sm-2 {
					flex: 0 0 16.66666667%;
					max-width: 16.66666667%;
				}

				.col-sm-3 {
					flex: 0 0 25%;
					max-width: 25%;
				}

				.col-sm-4 {
					flex: 0 0 33.33333333%;
					max-width: 33.33333333%;
				}

				.col-sm-5 {
					flex: 0 0 41.66666667%;
					max-width: 41.66666667%;
				}

				.col-sm-6 {
					flex: 0 0 50%;
					max-width: 50%;
				}

				.col-sm-7 {
					flex: 0 0 58.33333333%;
					max-width: 58.33333333%;
				}

				.col-sm-8 {
					flex: 0 0 66.66666667%;
					max-width: 66.66666667%;
				}

				.col-sm-9 {
					flex: 0 0 75%;
					max-width: 75%;
				}

				.col-sm-10 {
					flex: 0 0 83.33333333%;
					max-width: 83.33333333%;
				}

				.col-sm-11 {
					flex: 0 0 91.66666667%;
					max-width: 91.66666667%;
				}

				.col-sm-12 {
					flex: 0 0 100%;
					max-width: 100%;
				}

			}

			/*针对 Medium 桌面显示器 &ge;768px*/
			@media screen and (min-width: 768px) {
				.col-md-1 {
					flex: 0 0 8.33333333%;
					/* 父级元素宽度百分比*/
					max-width: 8.33333333%;
				}

				.col-md-2 {
					flex: 0 0 16.66666667%;
					max-width: 16.66666667%;
				}

				.col-md-3 {
					flex: 0 0 25%;
					max-width: 25%;
				}

				.col-md-4 {
					flex: 0 0 33.33333333%;
					max-width: 33.33333333%;
				}

				.col-md-5 {
					flex: 0 0 41.66666667%;
					max-width: 41.66666667%;
				}

				.col-md-6 {
					flex: 0 0 50%;
					max-width: 50%;
				}

				.col-md-7 {
					flex: 0 0 58.33333333%;
					max-width: 58.33333333%;
				}

				.col-md-8 {
					flex: 0 0 66.66666667%;
					max-width: 66.66666667%;
				}

				.col-md-9 {
					flex: 0 0 75%;
					max-width: 75%;
				}

				.col-md-10 {
					flex: 0 0 83.33333333%;
					max-width: 83.33333333%;
				}

				.col-md-11 {
					flex: 0 0 91.66666667%;
					max-width: 91.66666667%;
				}

				.col-md-12 {
					flex: 0 0 100%;
					max-width: 100%;
				}
			}

			/*针对 Large 大桌面显示器 &ge;992px*/
			@media screen and (min-width: 992px) {
				.col-lg-1 {
					flex: 0 0 8.33333333%;
					/* 父级元素宽度百分比*/
					max-width: 8.33333333%;
				}

				.col-lg-2 {
					flex: 0 0 16.66666667%;
					max-width: 16.66666667%;
				}

				.col-lg-3 {
					flex: 0 0 25%;
					max-width: 25%;
				}

				.col-lg-4 {
					flex: 0 0 33.33333333%;
					max-width: 33.33333333%;
				}

				.col-lg-5 {
					flex: 0 0 41.66666667%;
					max-width: 41.66666667%;
				}

				.col-lg-6 {
					flex: 0 0 50%;
					max-width: 50%;
				}

				.col-lg-7 {
					flex: 0 0 58.33333333%;
					max-width: 58.33333333%;
				}

				.col-lg-8 {
					flex: 0 0 66.66666667%;
					max-width: 66.66666667%;
				}

				.col-lg-9 {
					flex: 0 0 75%;
					max-width: 75%;
				}

				.col-lg-10 {
					flex: 0 0 83.33333333%;
					max-width: 83.33333333%;
				}

				.col-lg-11 {
					flex: 0 0 91.66666667%;
					max-width: 91.66666667%;
				}

				.col-lg-12 {
					flex: 0 0 100%;
					max-width: 100%;
				}
			}

			/*Extra large 超大桌面显示器 &ge;992px*/
			@media screen and (min-width: 1200px) {
				.col-xl-1 {
					flex: 0 0 8.33333333%;
					/* 父级元素宽度百分比*/
					max-width: 8.33333333%;
				}

				.col-xl-2 {
					flex: 0 0 16.66666667%;
					max-width: 16.66666667%;
				}

				.col-xl-3 {
					flex: 0 0 25%;
					max-width: 25%;
				}

				.col-xl-4 {
					flex: 0 0 33.33333333%;
					max-width: 33.33333333%;
				}

				.col-xl-5 {
					flex: 0 0 41.66666667%;
					max-width: 41.66666667%;
				}

				.col-xl-6 {
					flex: 0 0 50%;
					max-width: 50%;
				}

				.col-xl-7 {
					flex: 0 0 58.33333333%;
					max-width: 58.33333333%;
				}

				.col-xl-8 {
					flex: 0 0 66.66666667%;
					max-width: 66.66666667%;
				}

				.col-xl-9 {
					flex: 0 0 75%;
					max-width: 75%;
				}

				.col-xl-10 {
					flex: 0 0 83.33333333%;
					max-width: 83.33333333%;
				}

				.col-xl-11 {
					flex: 0 0 91.66666667%;
					max-width: 91.66666667%;
				}

				.col-xl-12 {
					flex: 0 0 100%;
					max-width: 100%;
				}
			}

			/**为了看效果 后面完成后要删掉*/
			.container {
				background: #0000FF;
			}

			.row {
				background: #FF7F50;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="row">
				<div class="col-6 col-sm-4 col-md-1 col-xl-3" style="background: #8FBC8F;">1</div>
				<div class="col-6 col-sm-4 col-md-3 col-xl-1" style="background: darkolivegreen;">2</div>
				<div class="col-6 col-sm-4 col-md-1 col-xl-4" style="background: #8FBC8F;">3</div>
				<div class="col-6 col-sm-4 col-md-4 col-xl-1" style="background: darkolivegreen;">4</div>
				<div class="col-6 col-sm-4 col-md-2 col-xl-2" style="background: #8FBC8F;">5</div>
				<div class="col-6 col-sm-4 col-md-1 col-xl-1" style="background: darkolivegreen;">6</div>
			</div>
			<div class="row">
				<div class="col-3" style="background:  sandybrown;">1</div>
				<div class="col-5" style="background:  blue;">2</div>
				<div class="col-4" style="background: sandybrown;">3</div>
			</div>
		</div>
	</body>