日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

CSS 浮動布局實例

 

其實文章原名叫做 “碰到不支持 flex 的項目怎么辦?”

現在差不多已經是 flex 的天下了,簡單靈活,但有時還是不可避免地會接觸到 IE 瀏覽器,比如我最近接觸的 閱文作家專區 (qq.com)[1],這個就是需要兼容 IE9, 也自然不能使用 flex 布局了。不能使用 flex 怎么辦(這個項目怎么這么XX,都 2021 年了還要兼容 IE)?那只能回歸傳統布局方式了,也就是浮動布局。

浮動 float 可以說是 css 布局里最為靈活的布局之一了,千萬不要小瞧了浮動,有些布局只有浮動才能實現呢。下面將介紹幾種常見的布局,一起看看吧

一、文本環繞布局

這類布局應該就是浮動最初的用意了,比如這樣的

CSS 浮動布局實例

 

設置一個左浮動就可以了,實現如下

<div>
  <strong class="float">浮</strong>
  <p>動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。</p>
</div>
.float{
  float: left;
  /*其他樣式*/
}

完整代碼可訪問 float-layout (codepen.io)[2]

需要注意的是,浮動元素必須放在文本的前面( html 結構),如果放在文本后面

<div>
  <p>動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。</p>
  <strong class="float">浮</strong>
</div>

那么就會變成這樣

CSS 浮動布局實例

 

也就是說,浮動的影響范圍是由浮動元素在 HTML 中的結構決定的,這一點非常重要

不過,現在很少會見到這種環繞布局了,但有些時候這種思路還是挺有用的,比如在這篇文章 CSS 實現多行文本“展開收起” (juejin.cn)[3],里面就用到了浮動的特性,實現了右下角文本環繞的效果,有興趣的可以看看

CSS 浮動布局實例

 

二、兩欄布局

兩欄布局的特點是左邊是固定尺寸,右邊自動撐滿剩余空間,例如

CSS 浮動布局實例

 

結構如下

<div class="crad">
  <img class="head" src="xxx.jpg">
  <p class="info">浮動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。</p>
</div>

浮動實現如下,主要是文本需要設置 overflow: hidden 。這里就不談實現原理(BFC)了,有興趣深究的可以查看這篇文章 CSS深入理解流體特性和BFC特性下多欄自適應布局[4]

.head{
  float: left;
}
.info{
  overflow: hidden;
}

如果右邊是固定尺寸,比如這樣的

CSS 浮動布局實例

 

這種情況如何處理呢?很多人可能會想到右浮動,沒錯,但是要注意,HTML 結構不需要改動,也就是浮動元素仍然在文本的前面

.head{
  float: right;
}

值得注意的是,如果需要設置兩欄的間距 margin,需要設置在浮動元素

.head{
  float: left;
  margin-right: 8px;
}

完整代碼可訪問 float-2-cols[5]

三、三欄布局

三欄布局的特點是左右是固定尺寸,中間自動撐滿剩余空間,例如

CSS 浮動布局實例

 

結構如下

<div>
  <img class="head" src="xxx.jpg">
  <div class="right">編輯</div><!--注意是在文本的前面-->
  <p class="info">浮動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。</p>
</div>

注意,這里位于右側的按鈕在 HTML 結構中仍然是在文本的前方,只需要設置右浮動就行了

.head{  float: left;}.info{  overflow: hidden;}.right{  float: right;  margin-left: 8px;  /*其他樣式*/}

完整代碼可訪問 float-3-cols (codepen.io)[6]

四、文本省略跟隨布局

還有一類比較常見但是有些棘手的布局,是這樣的

1.當文本比較多時,超出隱藏,標簽文本在最右邊2.當文本比較少時,標簽文本跟隨文本

示意如下

CSS 浮動布局實例

 

這里如何使用浮動實現呢?仔細觀察,其實就是一個兩欄布局

<div class="card">    <div class="right">編輯</div>  <p class="info">浮動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。一直平移直到碰到了所處的容器的邊框,或者碰到另外一個浮動的元素。</p></div>
.info{  overflow: hidden;  white-space: nowrap;  text-overflow: ellipsis;}
CSS 浮動布局實例

 

很明顯現在標簽文本一直位于右邊,那如何實現標簽文本跟隨的效果呢?其實可以嵌套一個最大寬度為 100% 的容器

CSS 浮動布局實例

 

<div class="card">  <div class="wrap"> <!--添加一個最大寬度為100%的容器-->        <div class="right">標簽</div>        <p class="info">浮動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。一直平移直到碰到了所處的容器的邊框,或者碰到另外一個浮動的元素。</p>  </div></div>
.wrap{  display: inline-block;  max-width: 100%;}
CSS 浮動布局實例

 

完整代碼可訪問 float-auto-text (codepen.io)[7]

如果不考慮兼容的話,width: fit-content 會是更好的選擇,可以使容器保持 block 的特性,并且寬度由文本內容決定,詳細可以參考這篇文章: 理解CSS3 max/min-content及fit-content等width值 [8]

.wrap{  /*display: inline-block;*/  max-width: 100%;  width: fit-content;}

另外,如果多行文本就不適用了,可以用另一種方式實現,詳細原理可以查看這篇文章 CSS 實現多行文本“展開收起” (juejin.cn)[9]

CSS 浮動布局實例

 

完整代碼可訪問float-mul-tags (codepen.io)[10]

五、其他擴展布局

這一部分相當于以上的擴展了,下面來看一個案例。

有時候標簽的后面會有日期,會一直位于最右邊,效果如下

CSS 浮動布局實例

 

有人可能會想到絕對定位,但是這里的日期可能不是固定的,需要自適應寬度,那如何實現呢?其實就是就是兩種布局的結合

CSS 浮動布局實例

 

因此需要再添加一層容器,實現如下

<div class="card">    <span class="date">6-14</span>    <div class="outer-wrap"> <!--新加一層容器-->        <div class="wrap">            <div class="right">                <button class="btn">標簽</button>            </div>            <p class="info">浮動屬性指定一個元素應沿其容器的左側或右側放置,允許文本和內聯元素環繞它。該元素從網頁的正常流動(文檔流)中移除,盡管仍然保持部分的流動性。一直平移直到碰到了所處的容器的邊框,或者碰到另外一個浮動的元素。</p>    </div>  </div></div>

下面就是兩欄布局的寫法

.date{  float: right;}.outer-wrap{  overflow: hidden;}

提示:如果采用 fit-content 方式,可以省去 .outer-wrap 這一層容器

實時效果如下

CSS 浮動布局實例

 

完整代碼可訪問 float-auto-text-fixed (codepen.io)[11]

六、總結和說明

上面介紹了浮動布局的幾個常用案例,相信能適用于絕大部分布局,當然并不是推薦大家一定要使用浮動布局,甚至有時候布局混亂(HTML結構與視覺不一致)、實現啰嗦(嵌套層級多)等情況,但是在不兼容 flex 布局的瀏覽器中還是挺有用的(低于IE10),甚至還有僅僅只能使用浮動才能實現的布局(文本環繞)。這里總結如下

1.通過 BFC 實現自適應彈性布局,float + overflow2.浮動的影響范圍是由浮動元素在 HTML 中的結構決定的3.通過設置最大寬度實現文本跟隨效果(fit-content也可以)4.其他布局可相互組合實現5.另外這些 float 實現方式全兼容(IE6+),可以放心使用

隨著 IE 地逐漸退去,有些布局也會慢慢地淡出,就像早年的 table 布局一樣。但浮動布局一直在往新特性上發展,比如 Shapes 布局[12]就需要浮動做支持,另外,浮動布局也在慢慢支持邏輯屬性,比如 float: inline-start 。最后,CSS 最重要的是靈活性,多一種思路總是沒錯的。如果覺得還不錯,對你有幫助的話,歡迎點贊、收藏、轉發???

References

[1] 閱文作家專區 (qq.com): https://write.qq.com/
[2] float-layout (codepen.io): https://codepen.io/xboxyan/pen/RwpqWvJ
[3] CSS 實現多行文本“展開收起” (juejin.cn): https://juejin.cn/post/6963904955262435336
[4] CSS深入理解流體特性和BFC特性下多欄自適應布局: https://www.zhangxinxu.com/wordPress/ target=_blank class=infotextkey>WordPress/2015/02/css-deep-understand-flow-bfc-column-two-auto-layout/
[5] float-2-cols: https://codepen.io/xboxyan/pen/WNpYQLB
[6] float-3-cols (codepen.io): https://codepen.io/xboxyan/pen/oNZQLWB
[7] float-auto-text (codepen.io): https://codepen.io/xboxyan/pen/poeQbYo
[8] 理解CSS3 max/min-content及fit-content等width值 : https://www.zhangxinxu.com/wordpress/2016/05/css3-width-max-contnet-min-content-fit-content/
[9] CSS 實現多行文本“展開收起” (juejin.cn): https://juejin.cn/post/6963904955262435336
[10] float-mul-tags (codepen.io): https://codepen.io/xboxyan/pen/PopWVNX
[11] float-auto-text-fixed (codepen.io): https://codepen.io/xboxyan/pen/WNpYJpN
[12] Shapes 布局: https://www.zhangxinxu.com/wordpress/2019/02/css-css3-shapes

分享到:
標簽:CSS
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定