CSS中的float属性

Float属性介绍

  position属性和float属性一直是进行样式设计时的重点和难点。这篇文章内容是关于float属性简介,及其在布局时的作用。
  float属性,最初的定义其实是类似于word里面的文字环绕效果。这一点在css布局时也会体现出来。代码如下:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
        body {width: 200px; height: 100px;}
        img {float: right;}
        p {background-color: #aaaaaa;}
    </style>
</head>

<body>
    <p>
        <img src="./2.png" />
        This is some text. This is some text. This is some text.
        This is some text. This is some text. This is some text.
        This is some text. This is some text. This is some text.
        This is some text. This is some text. This is some text.
    </p>
</body>
</html>

原始float
这里可以看出,图片浮动在p块上,而p块中的文字是环绕在图片的四周的。
浮动元素不占任何正常文档流的空间,而浮动元素的定位还是基于正常的文档流(自上而下以及父子元素包含关系)。设置了float属性的元素自动转变为块级元素,拥有width、height等属性。比如上面例子的p块,由于img脱离了文档流,使p块从body的顶端开始。img是浮动在p块上的,p块里的文字则环绕在img四周。设置了元素浮动后,top、bottom、left、right属性就都不起作用了。只能通过margin或者padding来设置偏移和定位

随着web前端的发展,float的含义和作用也发生了改变,现在float属性更多地用在了元素定位上。
从上例可以看出,设置了float属性的元素只会影响紧随在它后面的元素(这里是p块)。


float的应用及可能出现的问题

1.子元素设置浮动导致父元素没有高度

这种情况一般出现在父元素没有给固定高度,而子元素设置为float和有固定的高度。究其原因是子元素设置浮动后,会使子元素脱离文档流,即子元素设置float属性后,当前的html文档会当作子元素不存在一样,所以可以看作父元素内根本没有内容,高度当然也就撑不开。
代码如下:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        .outer {
            /*width: 200px;
            height: 200px;*/
            background-color: #7B7B7B;
        }

        .inner {
            /*float: right;*/
            width: 100px;
            height: 100px;
            background-color: #00EC00;
        }
    </style>
</head>

<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>
</html>

效果图如下:
这里写图片描述
此时父元素被子元素撑开,高度和子元素高度一致。
当给子元素inner块添加float=right属性时,效果图如下:
这里写图片描述
父元素没有了!就是因为子元素设置浮动后从标准文档流中脱离出来了。

解决办法有如下:
- 设置父元素float属性。这样,父元素也是脱离当前文档流,子元素和父元素一起脱离,并且子元素仍在父元素内,父元素内容不空了,所以高度会适应子元素高度。
- 在最后一个设置浮动的子元素后加一个空div,清除浮动。即紧随inner标签后增加一个块级元素空标签。并设置clear: both。不过这样会增加额外的空标签。
- 父元素设置overflow:hidden属性。(注:如果父元素内不只有这一个floa属性的子元素,则如果其他子元素没有设置float属性,父元素的高度就和其他子元素中高度最高的一致。)

2.三栏布局,两边固定宽度中间自适应

首先给出利用float实现上述要求的代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
        * {margin: 0; padding: 0;}
        .left {float: left; width: 100px; height: 200px; background-color: #7B7B7B;}
        .right {float: right; width: 100px; height: 200px; background-color: #00EC00;}
        .main {margin: 0 230px; height: 200px; background-color: #0000E3;}
    </style>
</head>

<body>
    <div class="left"></div>
    <div class="right"></div>
    <div class="main"></div>
</body>
</html>

效果图:
float自适应宽度
使用这种方法一定要注意:
1. html结构为先写left块和right块,再写main块!因为float属性只会影响紧随其后的元素。如果是按照left-main-right的顺序写html结构,会出现如下情况:这里写图片描述
2. 左右两块需要设置width。中间块可不设置height,使其高度根据内容作相应改变。
3. 中间块与两边块的距离是通过margin: 0 230px;来控制的,230px即为距离控制量。

### CSS 中 `float: left` 与 `float: right` 的区别 CSS 中的 `float` 属性用于控制元素在页面中的浮动方向,其主要取值为 `left`、`right` 和 `none`。当设置为 `float: left` 或 `float: right` 时,元素会脱离文档流,并向指定的方向移动,直到碰到父容器或其他浮动元素为止[^1]。 #### 浮动方向不同 - **`float: left`**:元素尽可能地向左移动,允许其他内容(如文本或非浮动块)在其右侧显示,前提是空间足够。 - **`float: right`**:元素尽可能地向右移动,同样允许其他内容在其左侧显示。 这种差异使得开发者可以根据布局需求选择合适的浮动方向,例如将图片靠左排列并让文字环绕其右侧,或将导航栏靠右对齐等[^2]。 #### 对后续元素的影响 无论是 `float: left` 还是 `float: right`,都会导致元素脱离普通文档流,这意味着后续未设置浮动的元素可能会忽略它的存在并占据其原本的位置。但两者影响的侧边不同: - 如果使用 `float: left`,那么它会影响右边的内容,即这些内容可能被挤到它的下方。 - 如果使用 `float: right`,则影响的是左边的内容,可能导致左侧内容被挤到它的下方。 因此,在设计多列布局时,需要考虑多个浮动元素之间的相互影响[^4]。 #### 清除浮动的方式 为了防止浮动元素对后续布局造成干扰,可以使用 `clear` 属性来清除浮动。例如: - `clear: left`:该元素不允许出现在任何左浮动元素的右侧。 - `clear: right`:该元素不允许出现在任何右浮动元素的左侧。 - `clear: both`:该元素不允许出现在任何浮动元素的旁边。 通过合理使用 `clear` 属性,可以有效避免因浮动带来的布局错位问题[^4]。 #### 示例代码 以下是一个展示 `float: left` 与 `float: right` 差异的示例: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> .container { width: 600px; border: 1px solid #ccc; padding: 10px; } .left { float: left; width: 150px; height: 100px; background-color: lightblue; margin: 5px; } .right { float: right; width: 150px; height: 100px; background-color: lightcoral; margin: 5px; } .text { font-size: 18px; } </style> </head> <body> <div class="container"> <div class="left">Float Left</div> <div class="right">Float Right</div> <p class="text">这段文字会围绕着左右两侧的浮动框进行排列。</p> </div> </body> </html> ``` 在这个例子中,`.left` 元素向左浮动,而 `.right` 向右浮动,它们之间留出的空间允许文本在其周围流动[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值