目錄
0x00 min-content 寬度自適應
0x01 根據兄弟元素的數量來設定樣式
:nth -child()
0x02 calc
0x03 垂直居中
基於絕對定位的解決方案
基於 FlexBox 的解決方案
0x04 緊貼底部的頁腳
首頁 web前端 css教學 CSS結構與佈局

CSS結構與佈局

Feb 18, 2017 pm 02:55 PM
css


0x00 min-content 寬度自適應

CSS3 新增寬度屬性值width:min-content 可以將容器的寬度值設定為容器內最大的不可斷行的寬度(最寬的單字,圖片,或具有寬固定寬度的盒子元素)

figure{
    width:min-content;
    margin: auto;    
}
登入後複製

0x01 根據兄弟元素的數量來設定樣式

我們知道偽元素選擇器:only-child,其實,它可以等效於:first-child:last-child,即是第一項的同時也是最後一項,所以從邏輯上來講它是唯一的。而:last-child 也是:nth-last-child(1)的快捷寫法。

那麼接下來思考一個問題,li:first-chidl:nth-last-child(4) 代表什麼?結果是_一個正好有四個列表項的列表中的第一項_,ok,再結合兄弟選擇符~來命中它之後的每一項,就可以達到這樣一個目標在正好包含四個列表項的時候,命中它的每一項

li:first-child:nth-last-child(4),
li:first-child:nth-last-child(4) ~ li {
  
    background: red;
}
登入後複製

結合SASS,將其簡化復用

/*定义混合器*/
@mixin n-items($n){
    &:first-child:nth-last-child(#{$n}),
    &:first-child:nth-last-child(#{$n}) ~ &{
        @content;
    }
}

/*调用*/
li {
    @include n-items(4){
        /*属性与值写在这里*/
        background: red;
    }
}
登入後複製

:nth -child()

nth-child()的強大之處在於以接受an+b形式的表達式,那麼自然便可以使用其變種nth-child(n+4) 這種形式,它將會選擇除了第1,2,3個子元素之外的所有子元素。

ul li:first-child:nth-last-child(n+4),
ul li:first-child:nth-last-child(n+4) ~ li{
    /*当列表中至少包含四项时,命中包括该项之后的所有列表项*/
}
登入後複製

當然,不止於此,:nth-child()的玩法完全取決於你的腦洞。

0x02 calc

有時,若需要去實現一個背景寬度滿屏,內容寬度固定的佈局,也許我們會去這樣設計DOM 結構

<footer>
    <p class="wrapper">        
    </p>
</footer>
登入後複製

CSS 樣式:

footer{
    background: #333;
}

.wrapper{
    max-width: 900px;
    margin: 1em auto;
    height: 200px;
}
登入後複製

如此麻煩了,我們只需三行程式碼即可實現:

footer{
  background:#333;
  padding:1em calc(50% - 50px);
 }
登入後複製

使用了clac() 便可以在CSS 中進行簡單的算術運行,這使得DOM 結構變得非常簡潔,沒有任何的冗餘,當然,缺點也是顯而易見的,這裡的程式碼只會在footer 元素的父級超過900 px 才會看出效果。

calc() 中的百分比是基於其父級進行解析的

但,我們初次了解到了CSS3 中cacl() 這個魔法技巧。

0x03 垂直居中

基於絕對定位的解決方案

CSS 中有一個很常見的現象,真正的解決方法往往來自於我們最意想不到的地方。例如,可以結合positon:absolute 和transform:translate() 屬性來實現垂直居中

因為translate() 變形函數中的百分比是根據這個元素自身的寬度和高度為基準進行換算的,如此一來,便可以徹底解除對固定尺寸的依賴。

範例:DOM 結構

<body>
    <p class="main">
        <h1>Am i center?</h1>
        <p>Center me ,please!</p>
    </p>
</body>
登入後複製

CSS程式碼:

.main{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}
登入後複製

CSS结构与布局

不過,該方法也是存在不足的:
1.在某些瀏覽器中,可能會導致模糊顯示,因為元素有可能被放置在半個像素上。
2.在不適合使用絕對定位的情況下。而且絕對定位對整個佈局的影響也太強烈。

基於 FlexBox 的解決方案

毫無疑問,這算是目前最佳的解決方案了。而且,現代瀏覽器對 FlexBox 的支援已經相當高了。

對基於FlexBox 容器的items 使用margin:auto 不僅可以在水平方向方居中,垂直方向上也是如此,即使不指定任何寬度,因為這個元素分配到的寬度等於max-content.

CSS结构与布局

FlexBox 的另一個好處是可以文字也進行垂直居中, 只需在使用display:flex 的元素中加入align-items:center 和justify-content:center。

.main{
    background: deeppink;
    width: 50%;
    height: 50%;
    margin: auto;
    display: flex;
    align-items: center;
    justify-content: center;
}
登入後複製

CSS结构与布局

0x04 緊貼底部的頁腳

有時,我們期望頁頭和頁腳的高度由其內部因素來決定,而內容區塊的高度可以自動收縮並佔滿所有可用的空間。同樣,利用 FlexBox 這很容易。

body {
    min-height: 100vh;
    display:flex;
    flex-flow: column;

    header{
        /*heaer style*/
    }
    
    .main{
        flex:1;
    }

    footer{
        /*footer style*/
    }
}
登入後複製

我們給了 body 一個 min-height:100vh 的高度這樣它至少會佔據整個視口的高度,然後賦予 main 一個大於 0 的 flex 值就可以了。

問題:如果頁腳是固定在螢幕的底部的呢?如何解決當頁面滾動到最後的時候保證頁腳不會覆蓋內容區?

對於這個問題,純屬個人想法,可以在 footer 之後加上一個 p#_footer。

此時的DOM 結構如下:

<body>
    <header><header>
    <p class="main"></p>
    <footer></footer>
    <p id="_footer"></p>
</body>
登入後複製

而對於p#_footer 而言,不需要為其中添加任何的內容和样式,只需要它的高度等於footer 的高度就可以了,而對於這一點,使用jQuery 就可以輕鬆搞定。

$('#_footer').height($('footer').height())
登入後複製

如此,對於響應佈局也可以不用擔心了,雖然有點點hack,但也算完美的解決了,Bingo!


更多CSS結構與佈局 相關文章請關注PHP中文網!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

See all articles