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

瀏覽器相容性

另見