float

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

* 此特性的某些部分可能存在不同级别的支持。

float CSS 属性将元素放置在其容器的左侧或右侧,允许文本和行内元素环绕它。该元素会从页面的正常流中移除,但仍保留在流中(与绝对定位相反)。

试一试

float: none;
float: left;
float: right;
float: inline-start;
float: inline-end;
<section class="default-example" id="default-example">
  <div class="example-container">
    <div class="transition-all" id="example-element">Float me</div>
    As much mud in the streets as if the waters had but newly retired from the
    face of the earth, and it would not be wonderful to meet a Megalosaurus,
    forty feet long or so, waddling like an elephantine lizard up Holborn Hill.
  </div>
</section>
.example-container {
  border: 1px solid #c5c5c5;
  padding: 0.75em;
  text-align: left;
  width: 80%;
  line-height: normal;
}

#example-element {
  border: solid 10px #efac09;
  background-color: #040d46;
  color: white;
  padding: 1em;
  width: 40%;
}

浮动元素是指 float 的计算值不是 none 的元素。

由于 float 隐含了块布局的使用,它在某些情况下会修改 display 值的计算值。

指定值 计算值
inline block
inline-block block
inline-table table
table-row block
table-row-group block
table-column block
table-column-group block
table-cell block
table-caption block
table-header-group block
table-footer-group block
inline-flex flex
inline-grid grid
其他 未改变

注意: 当通过 HTMLElement.style 对象在 JavaScript 中访问 CSS 属性时,单词属性名会直接使用。尽管 float 在 JavaScript 中是保留关键字,但在现代浏览器中,CSS float 属性是作为 float 访问的。在旧版浏览器中,你必须使用 cssFloat 来访问 float 属性。(这类似于“class”属性被访问为“className”,而 <label> 元素的“for”属性被访问为“htmlFor”)。

语法

css
/* Keyword values */
float: left;
float: right;
float: none;
float: inline-start;
float: inline-end;

/* Global values */
float: inherit;
float: initial;
float: revert;
float: revert-layer;
float: unset;

float 属性被指定为一个单一的关键字,从下面的值列表中选择。

left

元素必须浮动在其包含块的左侧。

元素必须浮动在其包含块的右侧。

none

元素不得浮动。

inline-start

元素必须浮动在其包含块的起始侧。对于 ltr 脚本是左侧,对于 rtl 脚本是右侧。

inline-end

元素必须浮动在其包含块的结束侧。对于 ltr 脚本是右侧,对于 rtl 脚本是左侧。

正式定义

初始值none
应用于所有元素,但如果 display 的值为 none 则无效。
继承性
计算值同指定值
动画类型离散

正式语法

float = 
block-start |
block-end |
inline-start |
inline-end |
snap-block |
<snap-block()> |
snap-inline |
<snap-inline()> |
left |
right |
top |
bottom |
none |
footnote

<snap-block()> =
snap-block( <length> , [ start | end | near ]? )

<snap-inline()> =
snap-inline( <length> , [ left | right | near ]? )

示例

浮动元素的定位方式

如上所述,当一个元素浮动时,它会从文档的正常流中取出(但仍然是其中的一部分)。它会向左或向右移动,直到触及其包含框的边缘,或另一个浮动元素

在此示例中,有三个彩色方块。其中两个浮动在左侧,一个浮动在右侧。请注意,第二个“左侧”方块放置在第一个的右侧。额外的方块将继续向右堆叠,直到它们填满包含框,之后它们将换行到下一行。

浮动元素至少与其最高的嵌套浮动子元素一样高。我们将父元素设置为 width: 100% 并浮动它,以确保它足够高以包含其浮动子元素,并确保它占据父元素的宽度,这样我们就不必清除其相邻的兄弟元素。

HTML

html
<section>
  <div class="left">1</div>
  <div class="left">2</div>
  <div class="right">3</div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi tristique
    sapien ac erat tincidunt, sit amet dignissim lectus vulputate. Donec id
    iaculis velit. Aliquam vel malesuada erat. Praesent non magna ac massa
    aliquet tincidunt vel in massa. Phasellus feugiat est vel leo finibus
    congue.
  </p>
</section>

CSS

css
section {
  box-sizing: border-box;
  border: 1px solid blue;
  width: 100%;
  float: left;
}

div {
  margin: 5px;
  width: 50px;
  height: 150px;
}

.left {
  float: left;
  background: pink;
}

.right {
  float: right;
  background: cyan;
}

结果

清除浮动

有时你可能希望强制某个项目移动到任何浮动元素下方。例如,你可能希望段落保持与浮动元素相邻,但强制标题单独成行。请参阅 clear 以获取示例。

规范

规范
层叠样式表级别 2
# propdef-float
CSS 逻辑属性和值第 1 级
# float-clear

浏览器兼容性

另见