純CSS,用flex布局實現:內容少時頁腳在屏幕底部,內容多時頁腳跟隨在內容下面,附帶永遠固定在底部的導航欄


  本文寫於2020年1月14日。

前言:

  主要面向手機屏幕設計前端頁面,需求布局如下:

1578979549(1)

 

  要實現以上布局,且不使用JS去控制DOM,就需要用到CSS中的flex布局(建議您也去把flex好好學一下)。

  本文的實現方法只用純正的HTML和CSS,不需要任何框架或組件。

實現:

  直接上代碼好了。

html部分:

<!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>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="container">
        <section id="main">
            <h1>這里是主體內容,高度不一定</h1>
            <h2>高度不定</h2>
            <h3>其他內容</h3>
            <p>
                內容不多,balabala.....
            </p>
        </section>
	<!-- footer要顯示在屏幕底部或緊跟在main之后 -->
        <footer>
            這里是footer<br/>
            高度不一定
        </footer>
	<!-- nav永遠顯示在屏幕底部最上層 -->
        <nav>
            <h3 class="active">
                <a href="test1.html">內容不長</a>
            </h3>
            <h3>
                <a href="test2.html">內容夠長</a>
            </h3>
        </nav>
    </div>
</body>
</html>

CSS部分:

/* 對html和body關鍵是min-height: 100vh */
html,body {
    margin:0;
    min-height:100vh;
}
/* 這里是花哨 */
h1,h2,h3,h4,h5,h6,p {
    margin: 0;
    padding: 0;
}
#container {
    /* 對#container啟用flex布局 *?
    display: flex;
    /* 用flex-direction定義主軸為縱軸,即垂直布局 */
    flex-direction: column;
    /* 最小高度同樣為屏幕高度 */
    min-height:100vh;
    /* (其實這句可以不用)用space-between實現兩端布局 */
    justify-content: space-between;
}
#main {
    background-color:bisque;
    /* flex:1;的值是1 1 0%,【父控件有剩余空間占1份放大,父控件空間不足按1縮小,自身的空間大小是0%】 */
    /* (引自https://www.douban.com/note/717223803/) */
    flex:1;
}
/* footer欄不設置flex屬性,所以它的高度只會隨自身內容變化,不受頁面其他因素影響 */
footer {
    background-color:cadetblue;
    padding: 10px;
    /* padding-bottom的值是為nav欄設置的,否則nav欄會擋住一部分內容 */
    padding-bottom: 40px;
}
/* nav欄的樣式主要來向bootstrap中的fixed-bottom,背景色以下的內容為自行定義 */
nav {
    position: fixed;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1030;
    background-color: lightgreen;
    height: 30px;
    /* nav欄中的按鈕們也用flex布局,水平向為默認值不用特別定義 */
    display: flex;
}
/* 下面的內容與本文主題無關,不說了 */
nav h3 {
    flex: 1;
    text-align: center;
    border:1px solid #ff00dd;
}
nav h3.active {
    background-color: #ffffff;
}

  為了演示效果,我的目錄結構如下:

    style.css --- 樣式

    test1.html --- 頁面內容不夠高時的效果

    test2.html --- 頁面內容很高時的效果

  效果:

test

總結:

  遇到問題找百度(谷歌或者其他什么)是很多人都會去做的事,但是,別人家的結果真的不一定就適合自己。這次,我也是找了好長時間之后沒有理想的結果,所以就索性直接去學習了一下flex布局,然后自己在項目之外單獨做了這么一個測試,結果還就成了,所以,很多事情應該都沒有我們原本想象的那么簡單,同時也沒有我們原本想象的那么不簡單。

  關於文中的內容,歡迎您隨時與我交流。

  感謝您的來訪。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM