效果。

這個(gè)問(wèn)題,需要解決,否則有可能會(huì)影響頁(yè)面的布局。解決方案:

給父元素設(shè)置" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢(xún) 在線咨詢(xún)
15158846557 在線咨詢(xún)
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > web前端之css浮動(dòng)

web前端之css浮動(dòng)

時(shí)間:2023-09-27 22:00:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-09-27 22:00:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

web前端之css浮動(dòng):

一、浮動(dòng)

1.1 浮動(dòng)塌陷問(wèn)題

上面提到,在父元素不設(shè)置寬高的情況下,嵌套的子元素如果都設(shè)置了浮動(dòng),會(huì)呈現(xiàn)出父元素塌陷的

效果。

這個(gè)問(wèn)題,需要解決,否則有可能會(huì)影響頁(yè)面的布局。解決方案:

  1. 給父元素設(shè)置高度:這種方式在確定寬高的情況下,可以使用;但很多時(shí)候,容器都是由內(nèi)容
    撐起來(lái),所以根據(jù)內(nèi)容的多少,不太好控制這個(gè)高度(改動(dòng)較大)
  2. 外墻法:在父元素的后面,設(shè)置父元素的一個(gè)同級(jí)空元素(div),設(shè)置清除浮動(dòng);這種方式需要
    添加 過(guò)多的空元素,增加結(jié)構(gòu)代碼量;并且我們完全可以在后面那個(gè)同級(jí)父元素上直接清除浮
    動(dòng)。
  3. 內(nèi)墻法:在父元素內(nèi)部后面,添加一個(gè)空的子元素(div),設(shè)置清除浮動(dòng);問(wèn)題同外墻法類(lèi)似,
    但是 解決了外墻法不能解決的父元素塌陷問(wèn)題;相對(duì)于給父元素設(shè)置高度的不確定性,這種方
    式直接內(nèi)容撐起父元素的高度。
  4. 父元素設(shè)置為浮動(dòng),后面元素清除浮動(dòng):會(huì)觸發(fā)更多的問(wèn)題
  5. 父元素設(shè)置位行內(nèi)塊元素:display:inline-block; 達(dá)不到想要的布局效果
  6. 父元素設(shè)置overflow屬性:overflow屬性本身是用來(lái)解決內(nèi)容溢出元素的,處理方式:
    hidden代表溢出隱藏
    auto溢出自適應(yīng)(內(nèi)容沒(méi)有溢出時(shí)無(wú)滾動(dòng)條,溢出后有滾動(dòng)條)
    scroll內(nèi)容不管是否溢出,都會(huì)出現(xiàn)滾動(dòng)條
    默認(rèn)的visible溢出可視,不能解決父元素塌陷問(wèn)題。這種方式,在需要內(nèi)容溢出盒子顯示時(shí),
    可能會(huì)影響內(nèi)容的顯示效果
  7. 通過(guò)偽元素清除浮動(dòng):將偽元素插入到容器元素的最后面,代替內(nèi)墻法中插入的元素,并用偽元
  8. 使用 clearfix 類(lèi)清除浮動(dòng):工作中,我們常常將清除浮動(dòng)的功能封裝在一個(gè)clearfix類(lèi)中,這樣為
    容器元素設(shè)置該類(lèi),就可以清除浮動(dòng),這種方式可以復(fù)用,因此工作中很常用。
.list1 { background: green; width: 800px; /* 父容器浮動(dòng) */ float: left;}.box4 { /* 清除浮動(dòng) */ clear: both; height: 50px; background: pink;}?.list1 { background: green; width: 800px; /* 設(shè)置為行內(nèi)塊 */ display: inline-block;}?.list1 { background: green; width: 800px; /* 內(nèi)容溢出處理方式 */ /* 溢出隱藏 */ /* overflow: hidden; */ /* 有溢出出現(xiàn)滾動(dòng)條 */ /* overflow: auto; */ /* 顯示滾動(dòng)條 */ /* overflow: scroll; */ /* 溢出顯示,不能清除浮動(dòng) */ overflow: visible;}?/* 通過(guò)為元素來(lái)清除浮動(dòng) */.list1:after { /* 設(shè)置偽元素內(nèi)容為空 */ content: ""; /* 清除浮動(dòng) */ clear: both; /* 設(shè)置為塊元素 */ display: block;}?/* 創(chuàng)建clearfix類(lèi),來(lái)復(fù)用 */.clearfix:after { /* 內(nèi)容 */ content: ""; /* 塊元素 */ display: block; /* 清除浮動(dòng) */ clear: both;}


1.2 偽元素

偽元素用于創(chuàng)建一些不在文檔樹(shù)中的元素,并為其添加樣式。比如說(shuō),我們可以通過(guò):before來(lái)在一個(gè)

元素前增加一些文本,并為這些文本添加樣式。雖然用戶可以看到這些文本,但是這些文本實(shí)際上不

在文檔樹(shù)中。CSS2.1中提供了兩個(gè)偽元素

注意:偽元素必須設(shè)置content樣式,否則偽元素不會(huì)生效

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /* 偽元素 */ h1:before { /* 必須設(shè)置content屬性 */ content: "before content"; color: red; font-size: 50px; display: block; } /* 后面插入偽元素 */ h1:after { content: "after content"; color: green; } </style></head><body> <h1 class="box">hello</h1></body></html>


1.3 偽類(lèi)

偽類(lèi)用于當(dāng)已有元素處于的某個(gè)狀態(tài)時(shí),為其添加對(duì)應(yīng)的樣式,這個(gè)狀態(tài)是根據(jù)用戶行為而動(dòng)態(tài)變化

的。比如說(shuō),當(dāng)用戶懸停在指定的元素時(shí),我們可以通過(guò):hover來(lái)描述這個(gè)元素的狀態(tài)。雖然它和普

通的css類(lèi)相似,可以為已有的元素添加樣式,但是它只有處于dom樹(shù)無(wú)法描述的狀態(tài)下才能為元素

添加樣式,所以將其稱(chēng)為偽類(lèi)。

如::focus{ 樣式: 樣式值; } 獲取焦點(diǎn);表單控件中使用

1.4 偽元素與偽類(lèi)

偽元素與偽類(lèi)的特點(diǎn):

偽元素和偽類(lèi)的區(qū)別:

1.5 a 標(biāo)簽的偽類(lèi)

a 標(biāo)簽可以定義四個(gè)偽類(lèi):

:link { 樣式: 樣式值; } 初始狀態(tài);必須是第一次訪問(wèn)或者清除歷史記錄的訪問(wèn)

:visited { 樣式: 樣式值; } 訪問(wèn)后的狀態(tài)

:hover { 樣式: 樣式值; } 鼠標(biāo)懸停;鼠標(biāo)滑過(guò)效果

:active { 樣式: 樣式值; } 激活狀態(tài)

上面四個(gè)的使用順序 l-v-h-a(love hate 愛(ài)恨準(zhǔn)則)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /* .inp { color: red; } */ /* 偽類(lèi) */ /* .inp:focus { color: red; } */ /* 偽元素 */ /* .demo:before { content: "before input"; } */ .container { height: 300px; width: 300px; background: green; } /* 鼠標(biāo)滑過(guò)container,讓input文本變成紅色 */ /* .container:hover input { color: red; } */ .container:HOVER input { color: red; } /* 設(shè)置偽元素的語(yǔ)法不合法,偽元素只能添加在最后一個(gè)簡(jiǎn)單的選擇器上 */ /* .container:before .demo { */ /* .container .demo:before { content: "before div"; font-size: 50px; } */ .container .demo:BEFORE { content: "before div"; font-size: 50px; } /* love hate: link, visited, hover, active */ /* 鏈接樣式 */ /* a:link { color: red; } a:visited { color: green; } a:hover { color: orange; } a:active { color: skyblue; } */ </style></head><body> <div class="container"> <input class="inp" type="text" value="hello"> <div class="demo"></div> </div> <a href="#/demo33"> link-1 </a> <br> <a href="#/demo333"> link-2 </a> <br> <a href="#/demo3333"> link-3 </a> <br> <a href="#/demo33333"> link-4 </a> <br> <a href="#/demo333333"> link-5 </a> <br></body></html>


1.6 浮動(dòng)元素依次貼邊

默認(rèn)盒子會(huì)按照序列排序,如果盒子前面有兄弟元素,盒子將緊貼它的兄弟元素;如果沒(méi)有。盒子將

帖邊(帖在父元素的邊上)

也就是說(shuō),如果一行容不下該元素,該元素會(huì)自動(dòng)進(jìn)入下一行,找到能夠容下它的位置,然后渲染

例如老四,直接貼在老二上了

如果繼續(xù)往下找,發(fā)現(xiàn)下一行能夠容下它,它會(huì)渲染,即使上邊有多余的空隙(能夠容下它),他也

不會(huì)鉆進(jìn)去,所以說(shuō)他受他前面一個(gè)元素的影響







<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <style> .container { width: 800px; height: 800px; background: orange; margin: 20px auto; } .container div { /* 可以貼到浮動(dòng)元素上顯示 */ /* float: left; */ /* 另起一行顯示 */ display: inline-block; font-size: 50px; } .box1 { width: 100px; height: 600px; background: gold; } .box2 { /* width: 200px; */ /* 增加老二寬度 */ width: 400px; /* height: 500px; */ /* 降低2的高度 */ height: 200px; background: green; } .box3 { /* width: 400px; */ /* 減少老三寬度 */ width: 200px; height: 300px; background: pink; } .box4 { width: 300px; height: 100px; background: skyblue; } </style></head><body> <div class="container"> <div class="box1">1</div> <div class="box2">2</div> <div class="box3">3</div> <div class="box4">4</div> </div></body></html>


1.7 浮動(dòng)與行內(nèi)塊元素

浮動(dòng):

使元素脫離文檔流,按照指定的方向發(fā)生移動(dòng),遇到父級(jí)的邊界或者相鄰的浮動(dòng)元素就會(huì)停下來(lái)

行內(nèi)塊:

它具有行內(nèi)元素和塊元素兩者的特點(diǎn),可以實(shí)現(xiàn)對(duì)元素的有序排序。

兩者的區(qū)別

  1. 兩者主要區(qū)別在于當(dāng)標(biāo)簽的高度不一致時(shí),體現(xiàn)出的差異,如果高度不一致時(shí)候,
    浮動(dòng)的元素會(huì)改變排列的順序(貼邊)
    行內(nèi)塊元素會(huì)按順序排列,行內(nèi)塊元素不會(huì)貼邊,會(huì)另起一行
  2. 浮動(dòng)元素脫離文檔流,不會(huì)搶占空間,而行內(nèi)塊元素會(huì)搶占空間。

1.8 margin對(duì)元素寬度的影響

如果塊元素沒(méi)有設(shè)置寬度,默認(rèn)寬度就是父容器的寬度

如果我們修改margin,盒子的寬度會(huì)變化么?

在沒(méi)有設(shè)置盒子寬度的情況下,修改margin會(huì)影響盒子的寬度

如果盒子設(shè)置了寬度,不論如何更改margin-left或者margin-right,盒子的寬度都不會(huì)改變,但是

位置變化了,并且marign-left改變位置的優(yōu)先級(jí)要高于marign-right改變位置的優(yōu)先級(jí)(可以通過(guò)父

容器的html屬性align來(lái)更改優(yōu)先級(jí)。)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <style> .parent { width: 800px; height: 800px; margin: 0 auto; background: pink; } .child { height: 400px; background: green; /* margin-left和margin-right是正直,盒子寬度減小 */ /* margin-left: 100px; margin-right: 200px; */ /* margin-left和margin-right是正直,盒子寬度增加 */ /* margin-left: -100px; margin-right: -200px; */ /* 設(shè)置了寬度,margin無(wú)法改變寬度 */ width: 500px; /* 左邊距 */ /* margin-left: 200px; */ margin-left: -200px; /* 右邊距 */ margin-right: 200px; } </style></head><body> <!-- 可以通過(guò)align屬性更改盒子的對(duì)齊方式 --> <div class="parent" align="right"> <div class="child"></div> </div></body></html>


1.9 margin對(duì)浮動(dòng)元素的影響

對(duì)于標(biāo)準(zhǔn)文檔流來(lái)說(shuō),塊元素占滿整行,因此設(shè)置他的水平方向的margin,不會(huì)影響后面的元素

marign是相對(duì)于原有位置移動(dòng)的

如果讓盒子浮動(dòng),此時(shí)對(duì)盒子設(shè)置邊距會(huì)影響后面的元素,前面元素位置不受影響(浮動(dòng)元素貼邊的

特性)

  1. 如果浮動(dòng)的盒子通過(guò)margin移動(dòng),是受前面元素影響的,那么盒子移動(dòng)的距離就是前面所有盒
    子移動(dòng)的距離
  2. 如果將盒子2移動(dòng)到盒子1前面,移動(dòng)的距離與盒子1移動(dòng)的距離無(wú)關(guān),與盒子1以及盒子2的寬
  3. 度有關(guān):盒子1的寬度 + 盒子2的寬度 = 200px + 200px = 400px
  4. 當(dāng)盒子2移動(dòng)到盒子1前面,盒子3盒子1貼邊了(盒子3沒(méi)有設(shè)置邊距,與1貼邊)
    為盒子設(shè)置邊距(-50px)時(shí),這時(shí)移動(dòng)的真實(shí)距離是:盒子1移動(dòng)的距離,+盒子2 的寬度+盒子3
    移動(dòng)的距離:50px + 200px + 50px = 300px。盒子3跨過(guò)盒子2(與盒子2寬度有關(guān)),與盒子1貼
    邊(與盒子1移動(dòng)的距離有關(guān)),自身又移動(dòng)了(與盒子3自身移動(dòng)的距離有關(guān))
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    .container {
    width: 800px;
    height: 800px;
    background: gold;
    margin: 0 auto;
    }
    .container div {
    width: 100px;
    height: 100px;
    font-size: 50px;
    color: red;
    /* 浮動(dòng) */
    float: left;
    }
    .box1 {
    background: green;
    margin-left: -50px;
    }
    .box2 {
    background: pink;
    /* 水平方向設(shè)置邊距 */
    margin-left: -50px;
    opacity: 0.7;
    }
    .box3 {
    background: skyblue;
    opacity: 0.7;
    margin-left: -50px;
    }
    /* 重寫(xiě)參考位置的容器 */
    .ickt {
    height: 100px;
    background: rgb(180, 119, 162);
    }
    .ickt div {
    margin-left: 0;
    }
    /* 結(jié)論1 */
    /* 浮動(dòng)元素移動(dòng)的距離受前面元素影響,移動(dòng)的距離就是前面元素移動(dòng)距離之和 */
    /* box3移動(dòng)的距離 = box1移動(dòng)的距離 + box2移動(dòng)的距離 + 自身移動(dòng)的距離 = 50 + 50 + 50 = 150 */
    /* w代表自身寬度,d代表移動(dòng)距離 */
    /* 依次貼邊: d3 = d1 + d2 + d3 */

    /* 結(jié)論2 */
    /* 讓盒子2移動(dòng)到盒子1的前面,盒子2移動(dòng)的距離與盒子1無(wú)關(guān),與盒子2與盒子1的寬度有關(guān) */
    /* 移動(dòng)的距離:盒子2的寬度 + 盒子1的寬度 */
    /* w代表自身寬度,d代表移動(dòng)距離 */
    /* 2貼1邊: d2 = w1 + w2 */

    /* 結(jié)論3 */
    /* 如何盒子2移動(dòng)到盒子1的前面,此時(shí)盒子3移動(dòng)的距離是:盒子1移動(dòng)的距離 + 盒子2的寬度 + 盒子3移動(dòng)的距離 */
    /* w代表自身寬度,d代表移動(dòng)距離 */
    /* 2移出去,3貼1邊: d3 = d1 + w2 + d3 */

    /* 結(jié)論4 */
    /* 如果盒子1移動(dòng)的距離超出了盒子1的寬度,此時(shí)盒子2移動(dòng)(盒子1寬度+盒子2寬度)的時(shí)候,就不能保證始終在盒子1前面,因此此時(shí)盒子2在移動(dòng)之前沒(méi)有與盒子1貼邊 */
    /* 2貼容器,所以1與2無(wú)關(guān)了,都是相對(duì)于容器的邊來(lái)移動(dòng),可能會(huì)遮蓋 */
    </style>
    </head>
    <body>
    <!-- 參考容器 -->
    <div class="container ickt">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    </div>
    <div class="container">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    </div>
    </body>
    </html>


關(guān)鍵詞:浮動(dòng)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉