写点什么

CSS(九)——盒子的浮动与定位

发布于: 2021 年 01 月 30 日
CSS(九)——盒子的浮动与定位

1.盒子浮动 float


Float 属性:


默认是 none,按照标准流来定位;


Left:左悬浮;


Right:右悬浮;


先看看没有加浮动的初始效果:


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 5px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;	}	.a2{		background-color: blue;		border: 2px blue solid;		margin: 5px;	}	p{		background-color: gray;		border: 2px gray solid;		margin: 5px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	<div class="a2">盒子2</div>	<p>Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程</p></div></body></html>
复制代码


运行结果: 



添加浮动 float 之后: 


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 5px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;		/* 设置盒子1向左悬浮 */		float: left;	}	.a2{		background-color: blue;		border: 2px blue solid;		margin: 5px;		/* 设置盒子2向右悬浮 */		float: right;	}	p{		background-color: gray;		border: 2px gray solid;		margin: 5px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	<div class="a2">盒子2</div>	<p>Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程</p></div></body></html>
复制代码


运行结果:



2.使用 clear 清除浮动的影响;


Clear 属性:

默认是 none,允许两边都可以有浮动对象;


Left: 不允许左边有浮动对象 ;   Right:不允许右边有浮动对象;    Both:不允许有浮动对象


2.1 不允许左边有浮动对象;


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 5px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;		/* 设置盒子1向左悬浮 */		float: left;	}	.a2{		background-color: blue;		border: 2px blue solid;		margin: 5px;		/* 设置盒子2的高度为50px; */		height: 50px;		/* 设置盒子2向右悬浮 */		float: right;	}	p{		background-color: gray;		border: 2px gray solid;		margin: 5px;		/* 设置p不允许左悬浮 */		clear: left;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	<div class="a2">盒子2</div>	<p>Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程</p></div></body></html>
复制代码


运行结果:



2.2 不允许右边有悬浮对象;


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 5px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;		/* 设置盒子1的高度为100px; */		height: 100px;		/* 设置盒子1向左悬浮 */		float: left;	}	.a2{		background-color: blue;		border: 2px blue solid;		margin: 5px;		/* 设置盒子2的高度为50px; */		height: 50px;		/* 设置盒子2向右悬浮 */		float: right;	}	p{		background-color: gray;		border: 2px gray solid;		margin: 5px;		/* 设置p不允许右悬浮 */		clear: right;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	<div class="a2">盒子2</div>	<p>Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程</p></div></body></html>
复制代码


运行结果:



2.3 左右都不允许有浮动对象;


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 5px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;		/* 设置盒子1的高度为100px; */		height: 100px;		/* 设置盒子1向左悬浮 */		float: left;	}	.a2{		background-color: blue;		border: 2px blue solid;		margin: 5px;		/* 设置盒子2的高度为50px; */		height: 50px;		/* 设置盒子2向右悬浮 */		float: right;	}	p{		background-color: gray;		border: 2px gray solid;		margin: 5px;		/* 设置p左右都不允许有悬浮 */		clear: both;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	<div class="a2">盒子2</div>	<p>Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程</p></div></body></html>
复制代码


运行结果:



3.盒子定位 position;


Position 属性:


默认是 static,按照标准流来定位; 


Relative:相对定位,相对于原本的标准位置偏移指定的距离;


Absolute:绝对定位,以它的包含框为基准进行偏移;


Fixed:固定定位,以浏览器窗口为基准进行定位;


先看看没有加定位的初始效果:


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 15px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;		padding: 10px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	</div></body></html>
复制代码


运行结果:



3.1.Relative:相对定位,相对于原本的标准位置偏移指定的距离;


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 15px;	}	.a1{		background-color: green;		border: 2px green solid;		margin: 5px;		padding: 10px;		/* 设置盒子1是相对定relative */		position: relative;		/* 将盒子1向右(相对于盒子1的原来位置而言)移动30px; */		left: 30px;		/* 将盒子1向下(相对于盒子1的原来位置而言)移动30px; */		top: 30px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	</div></body></html>
复制代码


运行结果:



3.2. Absolute:绝对定位,以它的包含框为基准进行偏移;


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 15px;	}	.a1{		background-color: green;		border: 2px green solid;		padding: 10px;		/* 设置盒子1是绝对定位absolute */		position: absolute;		/* 将盒子1向左(相对于浏览器的边框)靠齐,与浏览器的边框距离为0; */		left: 0px;		/* 将盒子1向上(相对于浏览器的边框)靠齐,与浏览器的边框距离为0*/		top: 0px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	</div></body></html>
复制代码


运行结果:


 可以看到盒子 1 已经与它的包含框(浏览器)对齐;


 此时若将包含盒子 1 的父盒子 parent 的定位设置成 relative 的话,那么包含框就变成了盒子 parent;


例如下例:


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 15px;		/* 设置福边框的position为relative */		position: relative;	}	.a1{		background-color: green;		border: 2px green solid;		padding: 10px;		/* 设置盒子1是绝对定位absolute */		position: absolute;		/* 将盒子1向左(相对于parent的边框)靠齐,与parent的边框距离为0; */		left: 0px;		/* 将盒子1向上(相对于parent的边框)靠齐,与parent的边框距离为0*/		top: 0px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	</div></body></html>
复制代码


运行结果:



可以看到盒子 1 已经与它的包含框(父边框 parent)对齐;


由此可见包含框的定义是:


包含框:离选定内容(盒子 1)最近的且含有 position 属性(relative、fixed 均可,absolute 不行)的边框称为包含框!


3.3.Fixed:固定定位,以浏览器窗口为基准进行定位;


不管父边框有任何的 position 属性,只要子边框是 fixed 属性,则子边框的包含框是浏览器!


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	.parent{		background-color: yellow;		border: 2px red solid;		padding: 15px;		/* 设置福边框的position为relative */		position: relative;	}	.a1{		background-color: green;		border: 2px green solid;		padding: 10px;		/* 设置盒子1是固定定位fixed,则一定是相对于浏览器而言*/		position: fixed;		/* 将盒子1向左(相对于浏览器的边框)靠齐,与浏览器的边框距离为0; */		left: 0px;		/* 将盒子1向上(相对于浏览器的边框)靠齐,与浏览器的边框距离为0 */		top: 0px;	}</style></head><body><div class="parent">	<div class="a1">盒子1</div>	</div></body></html>
复制代码


运行结果:



4.z-index 空间位置


z-index 默认属性是 0,z-index 值大的页面位于其小的页面的上方;


先来看看没有加 z-index 的页面:


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	img{		position: fixed;		top: 0px;		left: 0px;	}	h1{		border: red 1px solid;	}</style></head><body><h1>这是一个苹果</h1><img alt="" src="apple.jpg"/></body></html>
复制代码


运行效果:


 

可以看到图片的 position 是 fixed,相对于浏览器对齐,因此挡住了 h1 的内容;


如果我们想要将 img 放在 h1 的下方,作为背景图的话,就可以将 img 的 z-index 设置为负数;


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	img{		position: fixed;		top: 0px;		left: 0px;		/* 将img的z-index设置为-1,比h1的默认值0要小,因此位于h1的下方 */		z-index: -1;	}	h1{		border: red 1px solid;	}</style></head><body><h1>这是一个苹果</h1><img alt="" src="apple.jpg"/></body></html>
复制代码


运行结果:


 

5.盒子 display 属性


 Display:


Inline: 把元素变成内联元素;


Block: 把元素变成块级元素;


先来看看行级元素与块级元素的区别:


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><div>d1</div><div>d2</div><div>d3</div><span>s1</span><span>s2</span><span>s3</span></body></html>
复制代码


div 是块级元素,span 是行级元素;


运行结果:


 


再来看看加了 display 属性的结果:


<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style type="text/css">	div{		/* 将div变成内联元素 */		display:inline;	}	span{		/* 将span变成块级元素 */		display:block;	}</style></head><body><div>d1</div><div>d2</div><div>d3</div><span>s1</span><span>s2</span><span>s3</span></body></html>
复制代码


运行结果:


 

可以明显地看到 display 属性的作用,能将行级元素变成块级元素,也可以将块级元素变成行级元素;


我是【程序员的时光】,热爱技术分享,信仰终身学习,爱健身,会点厨艺的热血青年,我们下期再见!


发布于: 2021 年 01 月 30 日阅读数: 11
用户头像

程序员的路,会越来越精彩! 2020.04.30 加入

公众号:程序员的时光 记录学习编程的一路时光,从小白到现在也能稳操胜券; 主要从事Java后台开发,数据结构与算法,设计模式等等; 欢迎一起交流,分享经验,学习进步!

评论

发布
暂无评论
CSS(九)——盒子的浮动与定位