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

浮动+百分比布局

示例:
<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时

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

被折叠的 条评论
为什么被折叠?



