html中的float属性,css float属性 图解float属性的点点滴滴

本文详细探讨了CSS中的float属性,包括其在布局中的应用,如图文混排,以及可能遇到的陷阱,如内容环绕和浏览器兼容性问题。通过实例展示了如何正确使用float实现元素的左右对齐及内容环绕,同时提到了clear属性解决内容流动问题。此外,还讨论了float规则的复杂性,如浮动元素的排列和高度计算。文章强调了理解并掌握float属性对于前端开发者的重要性。
摘要由CSDN通过智能技术生成

正确使用CSS的float属性可能会变成一项艰巨的任务,它涉及内容过多,浏览器兼容性问题也很多。它的定位不仅涉及 包含块,还涉及到了行框,块框,还有行内框等内容。本文包含的实施例的应用属性float说明性例子,以及一些失误。

f2f9fcfadc7550b2307e54003a6e7982.png

“float”是什么?

CSS中的某些元素是块元素,例如,如果你把两个段落标记为P,那么他们将被放置在两行,。自己各占一行,如何向显示一行的话可以为元素使用inline属性来在页面显示,

另外一种有效改变页面元素的环绕属性是使用float,典型的例子是使用“float”,将图像向左或向右对齐。下面是一个简单的HTML代码的图片和段落:

复制代码代码如下:

200

Lorem ipsum...

它们显示在一个新行:

2380d7edad7ab8911406f380f755b675.png

让我们给image 增加点CSS代码,让他变变样,嘻嘻:

复制代码代码如下:

img

{

float: right;

margin: 20px;

}

这时,我们得到的是右对齐:

3cadfc3bba8e61ebc1b0314fbb41220b.png

如果有更多的文字,段落会继续环绕周围的图像:如下面的图

98394c472161afd562fbb4bada45e22b.png

例如,我们需要做的图像和文本缩进20像素。如何你这样写代码下面的代码是错误的,不会生效的:

复制代码代码如下:

p

{

margin: 20px;

}

以这种方式,这将是正确的:如下图

复制代码代码如下:

img

{

margin: 20px;

}

852a792f2e3838423963614af571c0d6.png

那么你要问了为什么上面写的p段落缩进20个像素会不起作用呢,不生效呢?为了找到答案,让我们添加一个框架代码:

复制代码代码如下:

p

{

border: solid 1px black;

}

结果可能会让你大吃一惊:

c1ce63f114603a7e056d1de12f655246.png

事实证明,看到没有加上边框之后(这里加不加边框对他们的影响是没有任何作用的,只不过是为了让你明白),图片是在段落内!因此,margin属性不起作用在第一种情况。为了解决这个问题,你可以为段落p使用浮动:float:left,设置一个绝对宽度:设置之后的效果如下图

复制代码代码如下:

img

{

float: right;

margin: 20px;

}

p

{

float: left;

width: 220px;

margin: 20px;

}

e2fd63d4eb9922bb2d0fb81277902ad8.png

奇怪的规则“float”

现在,让我们转向更复杂的方式使用“float”的规则,变换float对象。当创建缩略图时,它可能是必要的。例如:

复制代码代码如下:

  • b40319a77fa0842d516981731a4ede9b.png
  • b2e348fcc08eab0ec61d497bb3a017c4.png
  • 6ab23466f987b938d81c6e0eaa2e0250.png
  • 6545fea6dcf954450f3708185dd9e2bd.png
  • a7c76d7ab415ffb728e24022267c0e88.png
  • 1c97b27eeaf9a0966a700182239ed463.png
  • ce3b8ab033e6bf60b12211dab28be9db.png

默认情况下,每个li条目将各占一行。如果我们将每一个“float:left”,图像将排队一个换行符:

复制代码代码如下:

li

{

float: left;

margin: 4px;

}

b8a4737cc51061de36a1fcfbc9c0fe5d.png

但是,如果图像是不同的高度呢?

0675ee38c44865e1f9e94b5865967418.png

如果我们向列表中的元素的添加display属性,效果会好一些如下面的图

复制代码代码如下:

li

{

display: inline;

}

08a369eae117dedeb5f55615c9faa849.png

现在就让我们来垂直对齐:

复制代码代码如下:

img

{

vertical-align: top;

}

fd456573afce389e71e42b4da8902935.png

应该记住,如果这是图像更高的情况下,所有其它图像会围绕前一个图像,例如:

38b4d2ffab9546c6d476555b22040e1d.png

另外一个例子是改变顺序的元素,我们有一个列表的项目,

复制代码代码如下:

  • b40319a77fa0842d516981731a4ede9b.png li>
  • 100x100&text=2%E2%80%9D li>
  • 6ab23466f987b938d81c6e0eaa2e0250.png li>
  • 100x100&text=4 li>
  • a7c76d7ab415ffb728e24022267c0e88.png li>
  • 100x100&text li>

    ul>

    如果我们想要它们以相反的顺序排列的,我们只需要使用“float: right:”而非“float: left”,在HTML中,我们并没有改变元素顺序如上面的代码: 我们使用 css来操作

    640f1c2a1476ba413053a5914037299f.png

    在“float”的帮助下,页面上的项目进行组合是方便的,但我们面临的一个大问题:以下内容(文字或块)也会跟着变化。例如,我们有一组图片:

    500c3281b6ba38233cd0fcace7532ba4.png

    下面的文字开始流动,周围的整个块:

    b8c09695e1bc24a597b6ac21e4c2abe4.png

    为了避免这种情况,你必须使用“clear”的属性。如果我们将其应用到第二个图像:

    复制代码代码如下:

    ul li:nth-child(2)

    {

    clear: left;

    }

    以下是我们得到:

    2c9eb61df0aa65b73ca9b36f313193de.png

    在这种情况下,剩余的图像继续继承“float: left”。与此相对应,文字将显示失真:

    f33cf609323dc3c7541d815cae253f98.png

    我们需要对于段落使用clear:both:

    复制代码代码如下:

    p

    {

    clear: both;

    }

    解决我们的问题是:

    2722fd65b8f3865330a6032e13e7ea24.png

    现在,让我们想象一下,前面的例子我们需要设置背景为画廊的。如果该项目不浮动,那么我们将不得不这样:

    复制代码代码如下:

    ul

    {

    background: gray;

    }

    b85e38706358fcce3a12e6e29a213256.png 

    但是如果我们添加“float: left”从列表中,背景完全消失:

    1d66490f8e1d81f28a2d7114475d2c1a.png

    如果我们先设置高度为UL:

    复制代码代码如下:

    ul

    {

    height: 300px;

    }

    b87e0a528c8b6b791e5bfff600c92c82.png 

    它并没有解决问题,因为背景的大小被定义。类“clearfix”,这将被应用到'DIV'的元素在同一水平上的UL,会帮助我们。

    复制代码代码如下:

    .clearfix

    {

    clear: both;

    }

    有另一种解决方案,使用的“overflow”:

    复制代码代码如下:

    ul

    {

    overflow: auto;

    }

    24395130db171f61143102c28d70a945.png

    九条规则的float-items:

    浮动的项目不能超出它的父容器的边缘。左浮动框的左外边界(margin edge)不可以出现在它包含块左边界之左。对于右浮动的元素也有类似规则“如果当前框是左浮动框,并且在源文档中存在更早生成的左浮动框,那么对于任意这些先前的框,要么当前框的左外边出现在先前框的右外边之右,要么它的顶部必须在先前框的底部之下。对于向右浮动的框也有类似的规则。左浮动框的右外边不可以出现在它右侧的任何右浮动框的左外边之右。对于向右浮动的元素也有类似的规则。浮动框的顶边不可以高于源文档中先前元素产生的块框或浮动框的顶。浮动框的顶边不可以高于源文档中先前元素产生的包含一个框的任何行框的顶。一个浮动块必须位于尽可能高。左浮动框必须尽量靠左放置,右浮动框必须尽量靠右放置。在更高的位置和更靠左或靠右的位置间,选择前者。。左浮动框左边如果有另外一个左浮动框,它的右外边不可以出现在它包含块的右边之右。(或者比较宽松的要求是:一个左浮动不可以超出右边,除非它已经尽可能地靠左排列。)对于向右浮动的元素也有类似的规则。

    可见,浮动的规则却是很让人迷惑,但从这几条规则中你也不难发现,浮动的宗旨是,在不溢出包含块的情况下,尽量的靠上靠左/右放置,但是不能高于它前面生成的块框、浮动框和行框的顶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值