網站首頁 編程語言 正文
不需要清除浮動的圣杯布局
網上很多關于圣杯和雙飛翼布局的教程, 我看了下實現都是需要中間的三個元素 float
布局而且需要清除浮動. 但是真的需要三個元素都 float
嗎? 不清除浮動可以嗎?
先看效果
HTML
<header>header</header>
<main>
<aside id="left">left</aside>
<aside id="right">right</aside>
<div id="main">main</div>
</main>
<footer>footer</footer>
HTML
的結構很清楚, 上中下分別是 header
, main
和 footer
, 和常見圣杯布局的不同是, main
中間區域和兩邊區域的位置.
從下圖中可以看出來的是, 中間的 div
從 main
的第一個元素變成了最后一個元素. 這樣寫的目的是什么? 因為我們想要 div
顯示在中間, 如果 div
前面的元素為 float
, 那么后面的 div
自然就會正常顯示, 即水平填滿父容器寬度且上邊界和父元素的上邊界重合.
但是這樣問題又來了, 因為中間的 div
被兩側的遮擋住了, 別急, 馬上用請 CSS
幫忙.
CSS
首先重置 <body>
元素的默認 padding
和 margin
為 0
, 并設置其高度為 100vh
, 即瀏覽器視口 viewport
的高度.
body {
margin: 0;
padding: 0;
min-height: 100vh;
}
接著, 設置 header
和 footer
的高度, 都固定為 70px
.
header {
height: 70px;
}
footer {
height: 70px;
}
其次, 設置中間整個元素 <main>
的高度為父元素高度減去 header
和 footer
高度. 好了, 不需要清除浮動的原因出現了, 因為父元素的高度不是由子元素撐起的, 而是手動設置的.
main {
height: calc(100vh - 140px);
}
接下來, 設置兩個 <aside>
元素分別向左和右 float
, 寬度都是 100px
, 高度和父容器相同.
#left {
float: left;
width: 100px;
height: 100%;
}
#right {
float: right;
width: 100px;
height: 100%;
}
最后的大難題的解決就是設置 <main>
中間 div
的左右 padding
分別為左側 <aside>
和右側 <aside>
的寬度, 就保證其不會被遮擋. 當然別忘了高度和父容器保持一致.
#main {
margin-left: 100px;
margin-right: 100px;
height: 100%;
}
優化一下代碼, 為了防止窗口寬度很小導致 float
布局失效, 在屏幕寬度小于等于 300px
(稍大于左右側區域寬度之和) 時不顯示左右側區域并取消 <main>
中間 div
的 margin
.
@media screen and (max-width: 300px) {
#main {
margin: 0;
}
#left, #right {
display: none;
}
}
感謝你看到這里, 祝福你也順利通過面試, 找到心儀的工作??
原文鏈接:https://blog.csdn.net/broken_promise/article/details/125564785
相關推薦
- 2022-04-04 程序員新人入職第一天的基本操作(程序員入職第一天干啥)
- 2022-03-17 C#實現多文件打包壓縮(.Net?Core)_C#教程
- 2022-07-13 【arthas】使用arthas定位接口耗時問題、無日志情況下排查問題
- 2022-07-09 Android廣播實現App開機自啟動_Android
- 2022-07-24 python單向循環鏈表實例詳解_python
- 2022-06-06 Kafka在Zookeeper中存儲的信息有哪些?
- 2022-08-16 Python中集合的創建及常用函數的使用詳解_python
- 2022-06-30 python神經網絡MobileNetV2模型的復現詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支