搜尋
首頁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>        
    </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 結構

    <p>
        </p><h1 id="Am-i-center">Am i center?</h1>
        <p>Center me ,please!</p>
    

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 結構如下:

    <header><header>
    <p></p>
    <footer></footer>
    <p></p>
</header></header>

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

$('#_footer').height($('footer').height())

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


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


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
控制台命令指南控制台命令指南Apr 11, 2025 am 10:14 AM

多年來,開發人員的調試控制台已在Web瀏覽器中以一種或另一種形式提供。最初是作為錯誤報告的手段

被盜域名的情況被盜域名的情況Apr 11, 2025 am 10:12 AM

早在2011年,該網站的域名CSS-Tricks.com就被盜了。 “劫持域,”他們稱之為。它不僅是這個網站,但大約有12個網站

使用邊緣到邊緣網格的全寬元素使用邊緣到邊緣網格的全寬元素Apr 11, 2025 am 10:09 AM

如果您有一個有限的寬度容器,則說一個集中的文本列,“打破”以使全寬元素涉及欺騙。也許是最好的

創建一個詳細信息,但從未關閉創建一個詳細信息,但從未關閉Apr 11, 2025 am 10:02 AM

HTML中的元素和元素可用於使內容切換到文本部分。默認情況下,您會看到

使用Google電子表格和tabletop.js創建一個可編輯的網頁使用Google電子表格和tabletop.js創建一個可編輯的網頁Apr 11, 2025 am 10:01 AM

如果您曾經面臨過客戶的永無止境的內容修訂請求,請舉手。並不是說變化本身很困難,而是

創新無法保持網絡快速創新無法保持網絡快速Apr 11, 2025 am 09:59 AM

創新的果實每隔一段時間都以改進網絡的基礎層的形式產生果實。 2015年,HTTP/2成為已出版的

Guillermo&#039; 2019年審查Guillermo&#039; 2019年審查Apr 11, 2025 am 09:52 AM

在我讀過的所有以技術為重點的評論帖子中,Guillermo Rauch是我的最愛。那裡有很多

React路由器的鉤子React路由器的鉤子Apr 11, 2025 am 09:49 AM

React路由器5包含鉤子的力量,並引入了四個不同的鉤子來幫助路由。如果您正在尋找,您會發現這篇文章有用

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

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