响应式布局

本文探讨了两种网页布局技术:弹性布局和响应式布局。首先介绍了浮动+百分比布局的方式,虽然能随浏览器大小变化,但存在局限。接着详细讲解了Flex弹性盒布局,它更优地解决了元素排列和高度问题。最后,文章通过媒体查询展示了如何实现响应式设计,以适应不同屏幕尺寸的设备。

弹性布局

当我们制作网页时,当浏览器宽度大于页面的宽度时,在网页的右边会出现多余的空白。如果缩小浏览器的宽度,网页的内容会被遮挡一部分,如果想要查看网页全貌就需要拖动滚动条,但是拖动滚动条查看网页的操作大大降低了用户体验。

在这里插入图片描述
浮动+百分比布局
在这里插入图片描述
示例:

<head lang="en">
    <meta charset="UTF-8">
    <title>固定布局</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }     

        .box {
            width: 100%;
			height: 480px;
            border: 1px solid #000000;
            padding: 10px;
        }

        aside {
            width: 28%;
            float: left;
            background: red;
            padding: 10px;
        }      

        article {
            margin-left: 10px;
            width: 68%;
            float: left;
            background: yellow;
        }

    </style>
</head>
	<body>
		<div class="box clear">
			<!--省略部分代码-->
			<aside>
				<br><br><br><br><br><br><br><br><br>
			</aside>
			<article>
				<br><br><br><br><br><br><br><br><br><br><br>
				<br><br><br><br><br><br><br><br><br><br><br>
			</article>
		</div>
	</body>

在浏览器中浏览:
放大
在这里插入图片描述
缩小浏览器窗口
在这里插入图片描述
使用了浮动+百分比的布局方式,网页显示的内容不在受浏览器宽度影响,此时网页会随着浏览器的伸展而伸展,随着浏览器的缩小而收缩。

注意:也有缺点,也会出现少数空白,网页也不可以无限收缩,当收缩到最小宽度时,article元素会排到下一行。

Flex弹性盒布局
请添加图片描述
请添加图片描述

使用步骤
在这里插入图片描述
示例:

<head lang="en">
    <meta charset="UTF-8">
    <title>固定布局</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }     

        .box {
        	display: flex; /*声明当前标签作为Flex容器*/
            border: 1px solid #000000;
            padding: 10px;
        }

        aside {
            width: 28%;
            background: red;
            padding: 10px;
        }      

        article {
            margin-left: 10px;
            padding: 10px;
          	width: 68%;
            background: yellow;
        }

    </style>
</head>
	<body>
		<div class="box clear">
			<!--省略部分代码-->
			<aside>
				<br><br><br><br><br><br><br><br><br>
			</aside>
			<article>
				<br><br><br><br><br><br><br><br><br><br><br>
				<br><br><br><br><br><br><br><br><br><br><br>
			</article>
		</div>
	</body>

在浏览器中访问
放大
在这里插入图片描述
缩小浏览器
在这里插入图片描述
此方式相比浮动+百分比布局方式来说,没有对两个子元素设置浮动和高度,但是结果这两个元素排到了一行,且高度一致,同时还避免了article元素下方的留白现象,缩小浏览器也不会换行。

容器属性:设置给父元素的属性。
请添加图片描述
flex-direction:决定主轴的方向,即子元素在父容器中的位置:
在这里插入图片描述

示例

  .box {
        	display: flex; /*声明当前标签作为Flex容器*/
        	flex-direction: row;
			height: 480px;
            border: 1px solid #000000;
            padding: 10px;
        }

        aside {
            width: 28%;
            background: red;
            padding: 10px;
        }      

        article {
            margin-left: 10px;
            width: 68%;
            background: yellow;
        }

    </style>
</head>
	<body>
		<div class="box clear">
			<!--省略部分代码-->
			<aside>
				<br><br><br><br><br><br><br><br><br>
			</aside>
			<article>
				<br><br><br><br><br><br><br><br><br><br><br>
				<br><br><br><br><br><br><br><br><br><br><br>
			</article>
		</div>
	</body>

默认
在这里插入图片描述
从后往前排
修改样式:

   .box {
        	display: flex; /*声明当前标签作为Flex容器*/
        	flex-direction: row-reverse;
			height: 480px;
            border: 1px solid #000000;
            padding: 10px;
        }

在这里插入图片描述
纵向排列
修改代码

  .box {
        	display: flex; /*声明当前标签作为Flex容器*/
        	flex-direction: column;
			height: 480px;
            border: 1px solid #000000;
            padding: 10px;
        }

在这里插入图片描述
从后往前排,最后一项排在上面
修改样式

  .box {
        	display: flex; /*声明当前标签作为Flex容器*/
        	flex-direction: column-reverse;
			height: 480px;
            border: 1px solid #000000;
            padding: 10px;
        }

在这里插入图片描述
flex-wrap属性:用来定义子元素在一条轴线下排不下时应该如何换行,
在这里插入图片描述
示例:

 <head>
    <title>2_伸缩换行.html</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <style type="text/css">
    .divItem{
    width: 60px;
    /*height: 25px;  若Flex项目高度固定,无法实现侧轴拉伸效果 */ 
    border: 2px red solid;
    }
    [class^='flex']{
    border: 2px blue solid;
    width: 250px;
    height: 150px;
    margin: 5px 3px;
    float: left; /* 不需要此代码,此处只是为了方便看效果 */
    }
    
 		.flex1{
 			display: flex;
 			flex-wrap: nowrap;
 		}
 		.flex2{
 			display: flex;
 			flex-wrap: wrap;
 		}
 		.flex3{
 			display: flex;
 			flex-wrap: wrap-reverse;
 		}
    </style>
  </head>
  
  <body>
  	<div class="flex1">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  		<div class="divItem">div4</div>
  		<div class="divItem">div5</div>
  		<div class="divItem">div6</div>
  	</div>
  	
  	<div class="flex2">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  		<div class="divItem">div4</div>
  		<div class="divItem">div5</div>
  		<div class="divItem">div6</div>
  	</div>
  	
  	<div class="flex3">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  		<div class="divItem">div4</div>
  		<div class="divItem">div5</div>
  		<div class="divItem">div6</div>
  	</div>
  	
  </body>

运行结果
在这里插入图片描述
Justify-content属性
在这里插入图片描述

示例

   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <style type="text/css">
    .divItem{
    width: 60px;
    /*height: 25px;  若Flex项目高度固定,无法实现侧轴拉伸效果 */ 
    border: 2px red solid;
    }
    [class^='flex']{
    border: 2px blue solid;
    width: 250px;
    height: 150px;
    margin: 5px 3px;
    float: left; /*不需要此代码,此处只是为了方便看效果 */
    }
    
    .flex1{
    	display: flex;
    	justify-content: flex-start;/*默认值,从主轴的起点开始排列*/
    }
  	.flex2{
  		display: flex;
  		justify-content: flex-end;
  	}
  	.flex3{
  		display: flex;
  		justify-content: center;
  	}
  	.flex4{
  		display: flex;
  		justify-content: space-between;
  	}
  	.flex5{
  		display: flex;
  		justify-content: space-around;
  	}
  	
    </style>
  </head>
  
  <body>
  	<div class="flex1">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex2">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex3">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex4">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex5">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  </body>

运行结果
在这里插入图片描述
align-items属性
在这里插入图片描述
示例

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <style type="text/css">
    .divItem{
    width: 60px;
    /*height: 25px;  若Flex项目高度固定,无法实现侧轴拉伸效果 */ 
    border: 2px red solid;
    }
    [class^='flex']{
    border: 2px blue solid;
    width: 250px;
    height: 150px;
    margin: 5px 3px;
    float: left; /* 不需要此代码,此处只是为了方便看效果 */
    }
    
    .flex1{
    	display: flex;
    	align-items: stretch;
    }
   	.flex2{
   		display: flex;
   		align-items: flex-start;
   	}
   	.flex3{
   		display: flex;
   		align-items:flex-end;
   	}
   	.flex4{
   		display: flex;
   		align-items:center;
   	}
   	.flex5{
   		display: flex;
   		align-items:baseline;
   	}
    </style>
  </head>
  
  <body>
  	<div class="flex1">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex2">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex3">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex4">
  		<div class="divItem">div1</div>
  		<div class="divItem">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  	<div class="flex5">
  		<div class="divItem">div1</div>
  		<div class="divItem" style="font-size: 30px;">div2</div>
  		<div class="divItem">div3</div>
  	</div>
  </body>

运行结果
在这里插入图片描述

响应式布局

在这里插入图片描述

媒体查询
媒体查询可以针对不同屏幕尺寸设置不同的样式,使页面在不同终端设备下达到不同的渲染效果。
在这里插入图片描述
媒体查询引入方式:”
在这里插入图片描述

媒体特性
在这里插入图片描述

关键词
在这里插入图片描述
示例:

   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    <style type="text/css">
    div{
    width: 500px;
    height: 100px;
    border: 2px blue solid;
    border-radius:10px;
    margin: 20px;
    }
    
   	@media all and (min-width:1200px){
   		#div1{
	    	background-color: #0000FF;
	    }
   	}
   	
   	@media screen and (min-width:800px) and (max-width:1000px){
   		#div2{
	    	background-color: deeppink;
	    }
   	}
   	@media screen and (max-width:800px) {
   			#div3{
	    	background-color: red;
	    }
   	}
    </style>
    
    <link rel="stylesheet" href="css/linkCSS.css" media="print and (min-width:1200px)" />
  </head>
  
  <body>
    CSS3媒介类型测试. <br>
    CSS3含有多种媒介类型:<br>
    <!-- 测试all -->
    <div id="div1">all</div>
    <!-- 测试screen -->
    <div id="div2">screen</div>
    <!-- 测试print -->
    <div id="div3">print</div>
    <!-- 测试screen,print -->
    <div id="div4">screen,print</div>
  </body>

屏幕宽度最小为1200px时div1背景颜色为蓝色
在这里插入图片描述
屏幕宽度最小为800最大为1000时div2颜色为粉色
在这里插入图片描述
屏幕宽度为800及800以下的话div3颜色为红色显示
在这里插入图片描述
div4用外部文件方式引入媒体类型仅在使用打印机时有效。

示例:

<html>
	<head>
		<meta charset="UTF-8">
		<title>响应式布局.html</title>
		<style type="text/css">
			div{
				margin: 0px;
				padding: 0px;
			}
			@media screen and (min-width:1200px ) {
				img{
					width: 25%;
					float: left;
				}
			}
			@media screen and (min-width:800px )and (max-width:1200px) {
				img{
					width: 50%;
					float: left;
				}
			}
			@media screen and (max-width:800px ) {
				img{
					width: 100%;
					float: left;
				}
			}
		</style>
	</head>
	<body>
		<div>
			<img src="images/1.jpg" />
			<img src="images/2.jpg" />
			<img src="images/3.jpg" />
			<img src="images/4.jpg" />
		</div>
	</body>
</html>

屏幕宽度大于1200px时
在这里插入图片描述
宽度大于800小于1200px时
在这里插入图片描述
宽度小于800px时
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值