CSS實現(xiàn)元素浮動和清除浮動的方法
浮動基本介紹
- 在標(biāo)準(zhǔn)文檔流中元素分為2種,
塊級元素和行內(nèi)元素,如果想讓一些元素既要有塊級元素的特點也同時保留行內(nèi)元素特點,只能讓這些元素脫離標(biāo)準(zhǔn)文檔流即可。 - 浮動可以讓元素脫離標(biāo)準(zhǔn)文檔流,可以實現(xiàn)讓多個元素排在同一行,并且可以設(shè)置寬高度。
- 其實浮動是通過
float屬性來實現(xiàn)的。 - float屬性值說明表:
| 屬性值 | 描述 |
|---|---|
| left | 設(shè)置元素向左浮動。 |
| right | 設(shè)置元素向右浮動。 |
右浮動實踐
- 讓我們進(jìn)入右浮動的實踐,實踐內(nèi)容如:將
class屬性值為.box1元素設(shè)置為右浮動。 - 在進(jìn)入有浮動實踐之前我們先看看要浮動元素結(jié)構(gòu)是什么。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

為什么結(jié)果圖是一條邊框線呢?因為在div標(biāo)簽中還沒有內(nèi)容呢,現(xiàn)在我們將子div標(biāo)簽設(shè)置寬高度為100px像素并且添加背景顏色。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

- 為什么會排列為3行呢,因為3個
div標(biāo)簽都是塊級元素。 - 現(xiàn)在我們將
class屬性值為.box1的元素設(shè)置為右浮動。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float:right;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

注意:現(xiàn)在我們發(fā)現(xiàn)calss屬性值為.box元素高度變矮了,這就說明了(浮動元素它已經(jīng)脫離了標(biāo)準(zhǔn)文檔流,不再占用空間了)、并且向右浮動,浮動到自身的父元素的邊緣位置就停止了浮動。
左浮動實踐
讓我們進(jìn)入左浮動的實踐,實踐內(nèi)容如:將class屬性值為.box1元素設(shè)置為左浮動。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float:left;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

- 我們先理解浮動的原理之后再解釋下
class屬性值為.box2元素看不見的原因。 - 現(xiàn)在筆者給大家看2張實踐結(jié)果圖如:
結(jié)果圖A

結(jié)果圖B

- 通過這2張結(jié)果圖我們可以把浮動簡單的理解為“漂”舉例:
- 假設(shè)
class屬性值為.box是一個池塘,3個子元素都是能夠漂浮在池塘水面上的東西,現(xiàn)在我們將calss屬性值為.box1元素浮動起來,漂在池塘水面上,是不是就不再占用池塘內(nèi)的空間了。 - 既然我們理解為“漂”它一定是漂浮在池塘水面之上,但是沒有浮動的元素在池塘水面之內(nèi),所以
class屬性值為.box2元素看不見,并不代表它不存在只是被class屬性值為.box1元素給遮擋住了,現(xiàn)在我們將class屬性值為.box2元素寬度設(shè)置為150px像素。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float:left;
}
.box2{
width: 150px;
height: 100px;
background-color: #0f0;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

注意:事實證明class屬性值為.box2元素是存在的。
下面我們將calss屬性值為.box2元素設(shè)置為左浮動看看有什么不一樣的效果
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float:left;
}
.box2{
width: 150px;
height: 100px;
background-color: #0f0;
float: left;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

- 但是
class屬性值為.box2的元素左浮動并沒有左浮動到本身父元素的邊緣位置,為什么在class屬性值為.box1后面呢?因為父元素已經(jīng)有了浮動的子元素后面的子元素在浮動就浮動到前面浮動的元素之后。 - 現(xiàn)在我們將
class屬性值為.box3的元素設(shè)置為左浮動,看看有什么不一樣的效果。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float:left;
}
.box2{
width: 150px;
height: 100px;
background-color: #0f0;
float: left;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
結(jié)果圖

注意:浮動元素浮動以后,其父元素不再將浮動的子元素包裹在父元素之內(nèi),所以結(jié)果圖出現(xiàn)一條黑色的邊框線,若有不明白的看第一個實踐內(nèi)容。
將行內(nèi)元素設(shè)置浮動
- 如果我們給行內(nèi)元素設(shè)置了浮動,行內(nèi)元素就擁有了塊級元素的特點。
- 讓我們進(jìn)入行內(nèi)元素設(shè)置浮動實踐,實踐內(nèi)容如:將
div標(biāo)簽中的span標(biāo)簽設(shè)置為左浮動。 - 在設(shè)置左浮動之前我們先看看給
span標(biāo)簽設(shè)置寬高度和背景顏色有什么效果。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<span class="box1">微笑是最初的信仰1</span>
<span class="box2">微笑是最初的信仰2</span>
<span class="box3">微笑是最初的信仰3</span>
</div>
</body>
</html>
結(jié)果圖

- 現(xiàn)在發(fā)現(xiàn)我們給
span標(biāo)簽設(shè)置了寬高度為100px像素并沒有生效,因為現(xiàn)在span標(biāo)簽還是行內(nèi)元素。 - 現(xiàn)在我們給
span標(biāo)簽設(shè)置左浮動,然后我們在看看效果如何。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float: left;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
float: left;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
</style>
</head>
<body>
<div class="box">
<span class="box1">微笑是最初的信仰1</span>
<span class="box2">微笑是最初的信仰2</span>
<span class="box3">微笑是最初的信仰</span>
</div>
</body>
</html>
結(jié)果圖

注意:行內(nèi)元素設(shè)置為浮動之后就擁有了塊級元素的特點。
設(shè)置浮動總結(jié)
- 浮動的特點如:
- 浮動元素脫離了標(biāo)準(zhǔn)的文檔流,不再占用父元素的任何空間。
- 浮動元素比標(biāo)準(zhǔn)文檔流的元素層級要高,會將標(biāo)準(zhǔn)文檔流的元素遮擋住。
- 浮動元素會向左浮動或向右浮動。浮動元素會遇到父元素的邊緣就停止了浮動。
- 浮動元素會遇到已經(jīng)有了浮動的元素,后者會浮動到前者之后就停止了浮動。
- 浮動元素浮動之后就脫離了父元素,并且父元素不再包裹浮動的元素。
- 行內(nèi)元素設(shè)置為浮動,就擁有了塊級元素的特點。
為什么要清除浮動呢?
- 因為浮動的元素會影響到下面元素,具體看實踐結(jié)果圖大家就明白了。
class屬性值為.box元素的子類元素沒有浮動前的效果實踐。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>清除浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
<h1>清除浮動</h1>
</body>
</html>
結(jié)果圖

class屬性值為.box元素的子元素左浮動之后影響到下面的元素排版布局實踐。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float: left;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
float: left;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
<h1>清除浮動</h1>
</body>
</html>
結(jié)果圖

現(xiàn)在大家應(yīng)該明白了為什么要清除浮動了,有浮動就必須清除浮動,因為上面的元素設(shè)置了浮動就會影響到下面元素排版布局。
清除浮動有3種方式
第一種方式
- 給浮動的元素父元素設(shè)置一個固定的高度,從視覺上看到浮動的元素在父元素包裹之內(nèi)。
- 我們給浮動元素的父元素設(shè)置一個固定
600px像素的高度,一起來看看效果如何。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>清除浮動</title>
<style>
.box{
width: 600px;
height: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float: left;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
float: left;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
<h1>清除浮動</h1>
</body>
</html>
結(jié)果圖

這樣是解決了下面元素排版布局問題,但是筆者不推薦這么做,因為高度是由子元素的內(nèi)容撐起來的高度,而不是我們給的固定高度。
第二種方式
其實在CSS中也有清除浮動的屬性,清除浮動屬性名為clear。
clear屬性值說明表
| 屬性值 | 描述 |
|---|---|
| left | 清除左側(cè)浮動元素。 |
| right | 清除右側(cè)浮動元素。 |
| both | 清除左右側(cè)浮動元素。 |
- 要使用這個clear屬性必須創(chuàng)建一個新的div元素,創(chuàng)建新的
div元素不能放置任何內(nèi)容,它只能做一個件事情,那就是清除浮動并且將這個新創(chuàng)建的div元素放在最后一個浮動元素的后面才會生效。 - 左右清除浮動的屬性值筆者在這里就不一一實踐了,一般我們就用
both屬性值就可以了,左右清除浮動,干嘛還要計較它是左浮動或右浮動呢,直接清除左右浮動就ok了。 - 具體的看我們實踐的結(jié)果圖。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>清除浮動</title>
<style>
.box{
width: 600px;
border: 1px solid #000;
}
.box1{
width: 100px;
height: 100px;
background-color: #f00;
float: left;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
float: left;
}
.box3{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
.clear{
clear: both;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="clear"></div>
</div>
<h1>清除浮動</h1>
</body>
</html>
結(jié)果圖

注意:這才是我們真正想要的結(jié)果,并且從視覺上來看浮動的元素包裹在父元素之內(nèi)的效果。
第三種方式
- 使用屬性為
overflow并且屬性值為hidden來清除浮動,必須將這個屬性設(shè)置在浮動元素的父元素身上。 - 給大家普及下屬性為
overflow并且屬性值為hidden,它原意是用來將溢出的部分內(nèi)容進(jìn)行隱藏,但是它還可以清除浮動。 - 筆者先將內(nèi)容溢出然后在隱藏溢出的內(nèi)容,那我們一起來看看唄。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>溢出內(nèi)容進(jìn)行隱藏</title>
<style>
div{
width: 100px;
height: 50px;
border: 1px solid #000;
}
</style>
</head>
<body>
<div>
微笑是最初的信仰,微笑是最初的信仰,微笑是最初的信仰。
微笑是最初的信仰,微笑是最初的信仰,微笑是最初的信仰。
微笑是最初的信仰,微笑是最初的信仰,微笑是最初的信仰。
</div>
</body>
</html>
結(jié)果圖

下面筆者將溢出的內(nèi)容進(jìn)行隱藏。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>溢出內(nèi)容進(jìn)行隱藏</title>
<style>
div{
width: 100px;
height: 50px;
border: 1px solid #000;
overflow: hidden;
}
</style>
</head>
<body>
<div>
微笑是最初的信仰,微笑是最初的信仰,微笑是最初的信仰。
微笑是最初的信仰,微笑是最初的信仰,微笑是最初的信仰。
微笑是最初的信仰,微笑是最初的信仰,微笑是最初的信仰。
</div>
</body>
</html>
結(jié)果圖

- 使用屬性為
overflow并且屬性值為hidden來清除浮動。 - 清除浮動之前我們先看看結(jié)構(gòu)是如何的。
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>清除浮動</title>
<style>
ul{
list-style: none;
}
ul li{
float: left;
border: 1px solid red;
}
</style>
</head>
<body>
<ul>
<li>微笑是最初的信仰1</li>
<li>微笑是最初的信仰2</li>
<li>微笑是最初的信仰3</li>
<li>微笑是最初的信仰4</li>
<li>微笑是最初的信仰5</li>
<li>微笑是最初的信仰6</li>
<li>微笑是最初的信仰7</li>
<li>微笑是最初的信仰8</li>
</ul>
</body>
</html>
結(jié)果圖

注意:在這里筆者還沒有給浮動元素清除浮動呢,大家可以明顯的看到ul標(biāo)簽高度為0。
清除浮動實踐
代碼塊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>清除浮動</title>
<style>
ul{
list-style: none;
overflow: hidden;
}
ul li{
float: left;
border: 1px solid red;
}
</style>
</head>
<body>
<ul>
<li>微笑是最初的信仰1</li>
<li>微笑是最初的信仰2</li>
<li>微笑是最初的信仰3</li>
<li>微笑是最初的信仰4</li>
<li>微笑是最初的信仰5</li>
<li>微笑是最初的信仰6</li>
<li>微笑是最初的信仰7</li>
<li>微笑是最初的信仰8</li>
</ul>
</body>
</html>
結(jié)果圖

現(xiàn)在我們很清楚的看到ul標(biāo)簽高度為23px像素,為什么要使用:屬性為overflow并且屬性值為hidden來清除浮動,因為ul標(biāo)簽中只能使用li標(biāo)簽元素不能使用其它元素,所以屬性為overflow并且屬性值為hidden來清除浮動是最好不過啦。
總結(jié)
以上所述是小編給大家介紹的CSS實現(xiàn)元素浮動和清除浮動的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
- 這篇文章主要介紹了CSS 清除浮動、BFC的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-23

css overflow: hidden 的用法(溢出隱藏及清除浮動)
overflow:hidden是經(jīng)常用到的一個css屬性,它有兩種常用用法:溢出隱藏和清除浮動,這里就為大家介紹一下,需要的朋友可以參考下2020-03-13
這篇文章主要介紹了Css實現(xiàn)清除浮動的方法匯總,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-11- 塊級格式化上下文,是一個獨立的渲染區(qū)域,讓處于 BFC 內(nèi)部的元素與外部的元素相互隔離,使內(nèi)外元素的定位不會相互影響。這篇文章給大家介紹了CSS 使用偽元素清除浮動的方2019-07-01
本文通過圖文并茂的形式給大家介紹了CSS浮動與清除浮動的實例代碼,非常不錯,具有一定的參考借鑒價值,,需要的朋友可以參考下2019-04-29
這篇文章主要介紹了css 如何清除浮動的示例代碼,詳細(xì)的介紹了浮動到底是什么和清理浮動的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看2018-11-12
本文通過多種方法給大家介紹CSS清楚浮動clear:both的實例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-11-16






