css之float和clear

本文详细讲解了CSS中浮动元素的概念及应用,通过实例演示了如何使用浮动实现三栏布局,并探讨了不同方法来解决浮动元素导致的布局问题。
浮动元素

    浮动元素位于“文档流”外部,因而它不包含在标记中的父元素之内。那么什么时候我们需要用到浮动元素呢?举个最简单的例子,例如有些blog,有header,section, footer,其中section三栏布局,左侧是博文分类,中间是博文列表,右侧是一些信息。首先我们可以写出它的结构

<body>
    <header>头部</header>
    <section>
	<aside>左侧</aside>
	<iframe>内容</iframe>
	<aside>右侧</aside>
    </section>
    <footer>底部</footer>
</body>

现在我们看到的是常规文档流,即块级元素包围着所有子元素,而且在页面中自上而下相互堆叠在一起。这时我们为了达到三栏布局,最简单的方式就是运用浮动。

*{ margin:0; padding:0;}
header {background:rgb(204,255,204);}
section{background:yellow;}
aside{border:1px solid navy;width:100px;height:600px;background:pink;}
aside:nth-of-type(1) {float:left;}
aside:nth-of-type(2) {float:right;}iframe{background:blue;}
footer{background:red;}

141324_An3Z_866703.png

上面的图就是实现效果。从图中可以看出,aside与iframe倒是并列布局,但是其父元素<section>也不再包围浮动元素,只包围非浮动元素,所以footer给提上来了,这个肯定不满足我们的要求。为了使得footer位于aside以下,我们有三种解决方案:

第一种:为父元素应用overflow:hidden,以强制它包围浮动元素。在此例子中,把overflow:hidden应用到section中,会发现footer回到我们期望的位置了。Tips:

overflow:hidden声明的真正用途是防止包含元素被超大内容撑大。应用该声明之后,包含元素仍然保持其设定的高度和宽度,而超大的子内容则会被容器剪切掉。除此之外,overflow:hidden还有另一个作用,就是它能可靠地迫使父元素包含其浮动的子元素。

第二种:同时浮动父元素。在section中添加float:left;width:100%;。其实现效果如下图所示:

143210_zUGQ_866703.png

浮动父元素之后,不管其子元素是否浮动,它都会紧紧包裹住它的子元素。因此需要用width:100%再让section与浏览器容器等宽。另外,由于section现在也浮动了,所以footer会努力往上挤到它旁边去。为了强制footer依然呆在section下方,要给它应用clear:left。被清除的元素不会向上浮动,不让它超过浮动元素的下方边界。

第三种:添加非浮动的清除元素

第三种强制父元素包含其浮动子元素的方法,就是给父元素的最后添加一个非浮动的子元素,然后清除该子元素。由于包含元素一定会包围非浮动的子元素,而且清除会让这个子元素位于浮动元素的下方,因此包含元素一定会包含这个子元素-----以及前面的浮动元素。在包含元素最后添加子元素作为清除元素的方式有两种。第一种,纯添加一个表现的div。如以下代码:

<body>
		<header>头部</header>
		<section>
			<aside>左侧</aside>
			<iframe>内容</iframe>
			<aside>右侧</aside>
			<div class="clear"></div>
		</section>
		<footer>底部</footer>
	</body>

在css中添加

div.clear{clear:right;}

由于div没有默认样式,不会引入多余空间,所以div很适合这个目的。第二种,如果不想加入表现性的div,则给section添加一个class。

<body>
		<header>头部</header>
		<section class="clearfix">
			<aside>左侧</aside>
			<iframe>内容</iframe>
			<aside>右侧</aside>
		</section>
		<footer>底部</footer>
	</body>

header {background:rgb(204,255,204);}
section{background:yellow;}
aside{border:1px solid navy;width:100px;height:600px;background:pink;}
aside:nth-of-type(1) {float:left;}
aside:nth-of-type(2) {float:right;}
iframe{background:blue;}
footer{background:red;}
section.clearfix:after{content:'.';display:block;height:0;visibility:hidden;clear:both;}

这个规则它只添加了一个清除的包含句点作为非浮动元素(必须得有内容,而句点是最小的内容)。规则中的其他声明是为了确保这个伪元素没有高度,而且在页面上不可见。使用clear:both意味着section中新增的子元素会清除左右浮动元素(位于左、右浮动元素下方)。

ok,以上我们介绍了强迫父元素包围其浮动子元素的三种方式,分别是:给父元素添加overflow:hidden声明、浮动父元素、在父元素内容的末尾添加非浮动元素,可以直接在html中添加,也可以通过给父元素添加类,然后利用clearfix规则。

当然,这三种方法要因地制宜。比如,不能在下拉菜单的顶级元素上应用overflow:hidden,否则作为其子元素的下拉菜单就不会显示了,因为下拉菜单会显示在父元素区域的外部,而这恰恰是overflow:hidden所要阻止的。再比如不能对已经靠自动外边距居中的元素使用“浮动父元素”技术,否则它不会居中。

没有父元素如何清除

有时候,在清除某些浮动元素时,不一定正好有那么个父元素可以作为容器来强行包围它们。此时,最简单的方法就是给一个浮动元素应用clear:both,强迫它定位在前一个浮动元素的下方。然而,在空间足以容纳多个元素向上浮动时,这个方法未必有效。

关于三栏布局,建议看《css权威指南》第五章。




转载于:https://my.oschina.net/u/866703/blog/221785

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试性能评估。4.1测试环境与方法介绍测试环境配置采用的测试方法。4.2功能测试结果展示各功能模块的测试结果问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值