为什么浮动能实现文字环绕图片而不会重叠

今天看图解CSS的章节,虽然主要讲的是nth-of-type选择器的使用,但是本人却关注到了页面的排版方式,如下:

HTML

<body>
	<div class="article">
		<img src="http://img.ujian.cc/nice/35.jpg"  />
		<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
		<img src="http://img.ujian.cc/nice/36.jpg"  />
		<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
		<img src="http://img.ujian.cc/nice/38.jpg"  />
		<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
        </div>
</body>

CSS

<style type="text/css">
	.article {
		width: 500px;
		margin: 20px auto;
	}
	.article img:nth-of-type(odd){
		float: left;
		margin-right: 10px;
	}

	.article img:nth-of-type(even){
		float: right;
		margin-left: 10px;
	}
</style>

效果:

然后百思不得其解,因为img本身为行内元素,加了float之后变成了inline-block元素,兼有块状元素与行内元素的“气质”,但紧跟在其后面的p元素是真真的块状元素,当img浮动之后会脱离标准文档流,那么p元素会上移,按照经验文字部分会有一部分和img重叠(想象float后的元素都是漂浮在文档流之上的),然并重(然而并没有重叠)。

在火狐中用FixfireBUG查看,发现在img浮动之后p元素确实上移了(而不是右浮动了),而且从蓝色边框可以看出来,p元素占据了整个box如下图:

百思不得其解,所以又看了大神张鑫旭的文章,其中有一句话是这么说的“浮动的破坏性在于切断line box链,致使高度塌陷,但由于浮动元素仍在DOM tree中,实体是看得见摸得着的,所以其占据的实体位置还是在的。”

因此得出的结论就是(引用下面回复者的):

“脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位。需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。而对于使用absolute positioning脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。”

这样看来盒子内的内容也很重要啊!

时间: 2024-08-10 14:36:36

为什么浮动能实现文字环绕图片而不会重叠的相关文章

css文字环绕图片--遇到的问题及解决方法

一.前言 需要实现一个文字环绕图片的效果,心想so easy嘛. 1)代码部分 <style> .img-left { border: 3px solid #005588; width:300px; } .img-left img { float:left; /* 对图片进行浮动就可以实现了 */ width:150px; } </style> <div class="img-left"> <img src="https://ss0.

Bootstrap 3之美03-独立行,文字环绕,图片自适应,隐藏元素

本篇主要包括: ■  添加独立的一行■  文字环绕■  图片自适应■  隐藏元素 添加独立的一行 在id为body的section和id为main的section之间,添加2张图片. 我们发现,新加的2张图片把主体内容挤到了右侧. 那么,我们如何处理新加的2张图片呢?--我们不太可能用container,因为它是页面布局层面的类名.但我们可以把这2张图片放在class名为row的div中. 我们还可以加更多的图片. 现在的图片还没有居中.考虑到总共有12个单元格,而4张图片只占了8个单元格,还空

CSS文字环绕图片 图文混排效果

CSS实现文字环绕图片效果,也就是大家常见到的文中图效果,比如文字会自动围绕一个方块状的图片广告,这一切都是自动的,不需要另外排版,对此有需要有网页,可借鉴本代码,主要是利用CSS的clear属性实现. <html> <head> <title>CSS文字环绕图片 图文混排效果丨石家庄电缆附件</title> </head> <body> <div style="float:left;"> <di

CSS文字环绕图片,文中图效果

<html> <head> <title>CSS文字环绕图片</title> </head> <body> <div style="float:left;"> <div style="float:left;height:100px;width:1px;"> </div> <div style="float:left;height:230px;w

HTML/CSS实现文字环绕图片布局

原文: https://blog.csdn.net/yiyelanxin/article/details/75006925 在一个图文并茂的网页上,文字环绕图片可以使布局美观紧凑,如何实现呢?有两种办法:1.利用图片属性实现代码如下: <p style="width:400px;"> <img src="images/bkjj.jpg" align="right" width="120" hspace=&qu

css基础 float img 实现文字环绕图片的效果

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜.              ide:visual studio 2017             browser:Chrome                     os:win7 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu

(转)css中通常会用到浮动与清除,也是一个必须掌握的知识点,概念性的东西不多说,下面举几个例子,来说明它的用法:1.文字环绕效果 2.多个div并排显示 3.清除浮动(默认显示)

一.文字环绕效果: html代码如下: 1 <body> 2 3 <style type="text/css"> 4 #big img {float: left;padding: 10px;border: 1px solid red;} 5 #big span {font-size: 24px;font-weight: bold; margin: 0 auto;} 6 </style> 7 <div id="big">

文字、图片居中

http://www.zhangxinxu.com/wordpress/?p=61 ② 多行文字如何实现父容器高度固定,文字可能一行,两行或更多行的垂直居中对齐呢?实现的关键是把文字当图片处理.用一个span标签将所有的文字封装起来,设置文字与图片相同的display属性(inline-block属性),然后用处理图片垂直居中的方式处理文字的垂直居中即可.核心css代码如下,外部div标签: div{display:table-cell; width:550px; height:1.14em;

jquery 文字滚动大全 scroll 支持文字或图片 单行滚动 多行滚动 带按钮控制滚动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-