第343天:實現三欄布局

2021-02-20 山科小站
實現三欄布局

三欄布局在開發十分常見,即兩邊固定寬度,中間自適應寬度的布局。

Flex

使用CSS3的flex布局實現三欄布局,Flex布局也稱彈性布局,可以為盒狀模型提供最大的靈活性,是布局的首選方案,現已得到所有現代瀏覽器的支持,此處主要是利用flex容器成員默認按照主軸排列,以及利用flex屬性即flex-grow,flex-shrink和flex-basis的簡寫形式將間的塊自適應撐起。

<!DOCTYPE html>
<html>
<head>
<title>FLEX</title>
<style type="text/css">
.container{
display: flex;
height: 200px;
border: 1px solid #eee;
}
.container > div{
color: #fff;
}
.container > .left{
width: 200px;
background-color: #19be6b;
}
.container > .main{
flex: 1;
background-color: #2979ff;
}
.container > .right{
width: 200px;
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
</body>
</html>

Calc

通過CSS的calc可以動態計算中間部分的長度從而做到自適應,calc可以配合inline-block行內塊級元素實現三欄布局,注意使用行內塊級元素的時候如果編寫HTML時換行,這個空白的換行也會作為元素解析從而會產生空白間隙,所以在編寫時此處不要換行,此外calc通過與float配合實現也是可行的。

<!DOCTYPE html>
<html>
<head>
<title>Calc</title>
<style type="text/css">
.container{
height: 200px;
border: 1px solid #eee;
}
.container > div{
display: inline-block;
height: 100%;
color: #fff;
}
.container > .left{
width: 200px;
background-color: #19be6b;
}
.container > .main{
width: calc(100% - 400px);
background-color: #2979ff;
}
.container > .right{
width: 200px;
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div><div class="main">main</div><div class="right">right</div>
</div>
</body>
</html>

BFC

BFC塊級格式化上下文Block Formatting Context,是Web頁面的可視CSS渲染的一部分,是塊盒子的布局過程發生的區域,也是浮動元素與其他元素交互的區域,是用於布局塊級盒子的一塊渲染區域,並且與這個區域的外部毫無關係,是一個獨立的區域,是一個環境,在這裡利用BFC區域不會與浮動元素重疊的特性實現三欄布局。

<!DOCTYPE html>
<html>
<head>
<title>BFC</title>
<style type="text/css">
.container{
height: 200px;
border: 1px solid #eee;
}
.container div{
color: #fff;
height: 100%;
}
.container > .left{
float: left;
width: 200px;
background-color: #19be6b;
}
.container > .main{
display: flex; /* BFC可觸發條件之一:彈性元素,display為flex或inline-flex元素的直接子元素。 */
background-color: #2979ff;
}
.container > .right{
float: right;
width: 200px;
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div>
<div class="right">right</div>
<div class="main">main</div>

</div>
</body>
</html>

Margin

這個方法是使使左右模塊各自向左右浮動,並設置中間模塊的margin值使中間模塊寬度自適應。

<!DOCTYPE html>
<html>
<head>
<title>Margin</title>
<style type="text/css">
.container{
height: 200px;
border: 1px solid #eee;
}
.container div{
color: #fff;
height: 100%;
}
.container > .left{
float: left;
width: 200px;
background-color: #19be6b;
}
.container > .main{
margin-left: 200px;
margin-right: 200px;
background-color: #2979ff;
}
.container > .right{
float: right;
width: 200px;
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div>
<div class="right">right</div>
<div class="main">main</div>

</div>
</body>
</html>

Float

使用Float配合margin實現三欄布局,主要是margin的負值的應用。

<!DOCTYPE html>
<html>
<head>
<title>Float</title>
<style type="text/css">
.container{
height: 200px;
border: 1px solid #eee;
}
.container div{
color: #fff;
height: 100%;
}
.container > .left{
float: left;
width: 200px;
margin-left: -100%;
background-color: #19be6b;
}
.container > .main-container{
float: left;
width: 100%;
}
.container > .main-container > .main{
margin-left: 200px;
margin-right: 200px;
background-color: #2979ff;
}
.container > .right{
float: right;
width: 200px;
margin-left: -200px;
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="main-container">
<div class="main">main</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
</body>
</html>

Table

利用table布局即表格的樣式,實現三欄布局。

<!DOCTYPE html>
<html>
<head>
<title>Table</title>
<style type="text/css">
.container{
display: table;
height: 200px;
width: 100%;
border: 1px solid #eee;
}
.container > div{
display: table-cell;
color: #fff;
}
.container > .left{
width: 200px;
background-color: #19be6b;
}
.container > .main{
background-color: #2979ff;
}
.container > .right{
width: 200px;
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
</body>
</html>

Grid

目前CSS布局方案中,網格布局可以算得上是最強大的布局方案了。它可以將網頁分為一個個網格,然後利用這些網格組合做出各種各樣的布局。Grid布局與Flex布局有一定的相似性,都可以指定容器內部多個成員的位置。不同之處在於,Flex布局是軸線布局,只能指定成員針對軸線的位置,可以看作是一維布局。Grid布局則是將容器劃分成行和列,產生單元格,然後指定成員所在的單元格,可以看作是二維布局。

<!DOCTYPE html>
<html>
<head>
<title>Grid</title>
<style type="text/css">
.container{
height: 200px;
display: grid;
grid-template-columns: 200px auto 200px;
border: 1px solid #eee;
}
.container > div{
color: #fff;
}
.container > .left{
background-color: #19be6b;
}
.container > .main{
background-color: #2979ff;
}
.container > .right{
background-color: #fa3534;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
</body>
</html>

每日一題
https://github.com/WindrunnerMax/EveryDay

參考
https://zhuanlan.zhihu.com/p/25070186
https://juejin.cn/post/6844903686758465550
https://juejin.cn/post/6844904062224171021

相關焦點

  • 字節跳動:聖杯布局,有幾種辦法
    聖杯布局是經典的css布局,左右兩欄的寬度固定不變,中間那一欄是自適應,下面將用felx、float、position三種方法進行聖杯布局 效果圖:left和right是定寬,middle是自適應的body代碼:<body
  • EXCEL基礎:隱藏欄和列
    今天就來學習一個EXCEL的基本操作,隱藏欄和列。先上視頻,不急的往後排走,謝謝。隱藏欄和列非常的簡單,分兩個步驟來講,第一個是如何隱藏,第二個是如何 將隱藏的欄列再調回來。上面是隱藏列,隱藏行也是一樣的操作,比如需要隱藏第4行,就將滑鼠移至第4行的行標籤上,滑鼠左鍵選中第4行,然後滑鼠右擊,在彈出的菜單中選擇「隱藏」。
  • 第一次「親密接觸」 後兩敗俱傷 隔離欄表示很委屈|一盔一帶
    2021年1月20日上午11時許,柳州市公安局交警支隊柳南大隊接到報警稱,在柳太路龍城酒店路段,一輛小型新能源汽車撞毀了多榀道路隔離欄,被撞毀的隔離欄碎片又刮碰到對向車道三輛正在等待交通信號放行的車輛,造成四車不同程度損壞
  • 我的世界:被「玩壞」的裝備欄,來自P圖大神對裝備欄的七個設計
    裝備欄中的史蒂夫由一位粉色少女替代,然而裝備欄中修飾少女的裝備,卻是mc中的腐肉,看上去趣味十足。不過,十方對動漫少女並不了解,具體是為何是腐肉,還需要小夥伴們告知了,你知道是為什麼嗎?三、「新套裝」——圓錐套裝
  • 第333天:實現消息提示組件
    實現消息提示組件在瀏覽器頁面中,通用的消息提示組件一般可以分為靜態局部提示和動態全局提示,用於反饋用戶需要關注的信息
  • 22年駕齡女司機撞了隔離欄後她竟然逆行跑了|覆車之戒
    從監控畫面中,可以清晰看見該車輛在撞壞隔離欄後一路逆行到彎塘路,期間差點撞上一輛電動車,對正常行駛的車輛造成嚴重影響。民警立即電話聯繫黃某,一開始黃某承認自己是肇事者,但是她認為也就撞壞了幾個隔離欄,賠點錢沒什麼大不了,所以就選擇駕車逃逸,並希望民警不要小題大做。民警對她進行法制教育,並告知她將會面臨的處罰,黃某這才心慌,並於5日下午到城中交警大隊接受調查。
  • 堅持開放發展,著力實現合作共贏
    以世界眼光審時度勢、在全球範圍謀篇布局,是走上世界舞臺的中國必然的選擇。  「必須順應我國經濟深度融入世界經濟的趨勢,奉行互利共贏的開放戰略,發展更高層次的開放型經濟,積極參與全球經濟治理和公共產品供給,提高我國在全球經濟治理中的制度性話語權,構建廣泛的利益共同體」。
  • 我的性別欄填「X」 加州ID和駕照明年生效
    性別認同加州駕照或身分證申請人從明年1月1日起可以在性別欄中選擇男性、女性或非二元性別(nonbinary),選擇非二元性別將會在駕照的性別欄中以大寫字母X標示。這類罰單要求當事人在120天內上自行車安全課程,並向執法單位出示完成課程的證明和安全帽。不過,18歲和以上人士騎電動滑板車,不需戴安全帽。受影響駕駛(DUI)從明年1月1日起到2026年1月1日止,曾造成人體傷害的DUI駕駛人必須在汽車中安裝「引擎啟動連鎖裝置」(ignition interlock device),安裝時間從12個月到48個月不等。
  • 華郵網大講堂82:隱藏在日期欄的郵局秘密
    在郵政初開之時,僅有三數十個局所,到了清末,則已是遍及全國各大小鄉鎮,局所數以千計。由於大城市分支局所的快速增長,一些郵戳刻制不及,加上初期可能並未能即時確定郵局名稱等客觀原因,故一些郵局開設後,並未即時刻用新戳使用,而只是利用原有之總局日戳進行改造。
  • 天能:中國鋰電
    而天能鋰電作為此次獨家冠名品牌,亮出安全核心科技,引領中國鋰電。  而天能作為新能源動力電池領軍企業,提前布局鋰電池業務,並將鋰電池視為公司未來發展方向,投入大量資金研發鋰電池,從而實現產品、技術、市場、品牌等層面持續突破,領先於行業,力爭藉助這場鋰電之風,實現騰飛。
  • Excel教程:高效實用的三個Excel技巧
    輸入換行符雙擊單元格成編輯狀態後,按下Alt+Enter(回車),就相當於輸入了換行符,即可實現單元格內換行喲,很簡單~插入文本框,將文本框填充和邊框顏色均設置為「無」,輸入文字放在相應位置即可。完全可以的,只需要切換到「視圖-頁面布局」。
  • 【媒體聚焦】長江國際商會加速全球布局將成立20家商會
    伴隨著長江經濟帶應運而生的長江國際商會,正加速在全球布局。「長江國際商會第一批海外商會將布局全球7個城市,即紐約、亞特蘭大、舊金山、雪梨、南非等城市」。「我們計劃在全球主要城市成立20家長江國際商會,近期11月份至少還有澳大利亞等兩家長江國際商會正式掛牌成立」,劉萌對商會的未來全球布局充滿期待。在加速美洲、歐洲、歐洲等全球化布局的同時,長江國際商會不忘使命。「長江國際商會正沿著長江經濟帶進行全線布點,將資源廣泛調集並互動起來,把世界各地的企業家都吸引到湖北」。
  • 【動態棋譜】2015年「天龍立醒杯」全國象棋個人賽第06輪 柳天 負 於幼華
    標題: 湖北光谷象棋隊 柳天 負 浙江省民泰銀行象棋隊 於幼華分類: 全國象棋個人賽賽事: 2015年「天龍立醒杯」全國象棋個人賽輪次: 第06輪布局: C53 五六炮左邊馬對屏風馬 黑進7卒右直車右炮過河紅方: 湖北光谷象棋隊 柳天黑方: 浙江省民泰銀行象棋隊 於幼華
  • 華為松山湖臺科園團泊窪G2建築起火,是華為布局東莞的第三大基地
    據公開資料,華為先在東莞松山湖布局了兩大基地,分別是華為南方工廠、華為終端基地(歐洲小鎮)。而團泊窪實驗室基地是華為繼上述兩大基地之後在松山湖布局的第三大實驗基地,位於臺科園,有消息透露,這裡主要集中的是2012實驗室業務線的測試裝備交付部、中央硬體交付部、研發能力中心綜合交付部,以及雲核心網業務線的網絡能源戰略交付部
  • 重磅:智邦獵頭加速海外人才市場布局,搶灘成功登陸矽谷!
    近日,國內領先的人力資源服務提供商智邦集團發布公告稱,矽谷分公司正式掛牌成立,主要目的是加速海外人才市場布局,進一步拉平國內人才市場與海外的差距
  • 「五化」布局搶得發展先機
    集團公司第三次、股份公司第一次黨代會勝利閉幕後,我廠就迅速行動,圍繞「六新蘭花」目標,明確「五化」布局贏得發展先機,推動企業高質量轉型發展。安全管理規範化。以「水、電、氣(汽)」平衡為突破口,以統籌錯峰生產、設備檢修為著力點,重點做好造氣循環水系統直冷改間冷工藝技改,積極開展制度建設、優化工藝管理、提升應急能力等,確保全年生產目標順利實現。設備管理精細化。
  • Skill:如何是實現在Word中兩個表格並排顯示?
    看清楚了,注意兩個表格之間要留個空段落符,然後全部選中,在布局中設置分兩欄就好了。那怎麼取消分欄呢?很簡單,把光標放到分節符前面按delete鍵盤就OK。1張圖看懂從員工到老闆,你必須經歷的三次躍遷58歲的劉德華最終也要離開我們了,給我們的警示:過度努力,真的會毀了你!任正非突然出手!三天去了4個地方……什麼信號?遇事最有水平的處理方法(受益匪淺)歌手樸樹家世曝光:原來你爸媽這麼牛!一個讓你薪資超越99%職場人士的秘密武器!
  • 推動醫療資源合理布局,北京這些新院區已準備就位
    它們都在促進非首都功能疏解和京津冀協同發展、優化醫療資源布局、提升局部地區醫療服務能力等方面發揮了重要作用。北大人民醫院通州院區基本建成作為北京市政府的惠民服務工程之一,同仁醫院亦莊院區新門急診樓啟用後,醫院醫療主體陸續南移,將有效疏解非首都核心功能,推動醫療資源合理布局。北京同仁醫院院長張羅介紹,目前崇文門院區的感染科和產科已整體搬遷至亦莊院區。明年底前,醫院通過科室搬遷和號源引導,崇文門院區的門診量將壓減三分之一,未來將減少一半以上。今後,同仁醫院崇文門院區將主要服務周邊居民。
  • 三死一傷!痛心!
    104國道、343國道、303省道、329省道穿境而過,泗(洪)許(昌)高速、明(光)徐(州)高速、宿(州)淮(安)鐵路建成通車,西距京滬高鐵50千米,北距徐州觀音國際機場76千米,東距連雲港出口海口200千米。全縣水運碼頭3個。泗縣,隸屬於安徽省宿州市,古稱虹縣、泗州,位於安徽省東北部,東鄰泗洪,西接靈璧,南連五河、固鎮,北至東北與睢寧、宿遷毗鄰。總面積1787平方千米。
  • 【驚險】父母不在家 小孩貪玩頭卡門欄
    11月8日下午5點26分,位於仁化縣城解放東路一家出租屋裡,一個獨自被留在家李的小孩頭部竟然被卡在門欄中,動彈不得,現場十分驚險。仁化縣消防大隊接到報警後,立即出動官兵趕赴現場實施救援。據了解,家裡的大人外出,把小孩鎖在家裡了,孩子可能是因為頑皮,想從門欄逃出來,誰知道身體出來了,可是頭部卻被卡在門欄中動彈不得。所幸的是鄰居發現並報警,不然後果不堪設想。最後仁化縣消防大隊消防人員王加平說:「抱出來之後也沒發現受傷,如果卡得比較久血液不流通,對小孩會造成血管的壞死。」