this is ...
摘要:實(shí)際上表示視口寬度的,而不是。同樣,表示視口高度的當(dāng)視口寬度小于高度時(shí),等于,否則等于。基于的方法這種應(yīng)該算是最佳的解決辦法實(shí)現(xiàn)方法當(dāng)使用布局時(shí),使用在水平和垂直方向都會(huì)居中。
1.自適應(yīng)內(nèi)部元素
在css中,不給元素一個(gè)height值時(shí),元素會(huì)自適應(yīng)其內(nèi)部的元素高度,有時(shí)我們想讓元素的寬度也達(dá)到此效果,應(yīng)用場(chǎng)景如下。
如下當(dāng)前的這種布局,想要改成最外層的div的寬度由當(dāng)前的圖片撐開(kāi)的效果,這時(shí)就要用到min-content這個(gè)屬性值。
css代碼如下:
div { /*只需要給最層的div的寬度值設(shè)置成min-content即可 */ width: min-content; }
最終效果:
min-content將解析這個(gè)容器內(nèi)部最大的不可斷行元素的寬度(即最寬的單詞,圖片或具有固定寬度的盒元素)
張?chǎng)涡裼幸黄恼聦?duì)這個(gè)屬性做了詳細(xì)的講解,地址如下:
http://www.zhangxinxu.com/wor...
在使用表格布局時(shí),當(dāng)表格的內(nèi)容不確定時(shí),布局很難預(yù)測(cè),因?yàn)楸砀竦牧袑捠歉鶕?jù)它的內(nèi)容進(jìn)行計(jì)算的,即使顯示的設(shè)置了width,也不會(huì)生效,還是會(huì)根據(jù)它的內(nèi)容生成寬度。會(huì)根據(jù)加載的內(nèi)容不停的重繪,直到加載完。
平時(shí)生成的表格如下:
為了讓設(shè)置的寬度生效,并且能讓過(guò)多的文字省略號(hào)顯示,解決辦法就是使用table-layout: fixed這個(gè)樣式
代碼如下:
table { table-layout: fixed; width: 100%; /*必須指定一個(gè)width,否則不生效*/ }
最終的效果如下:
3.根據(jù)兄弟元素的數(shù)量設(shè)置樣式在一些應(yīng)用場(chǎng)景中,我們可能需要根據(jù)元素的數(shù)量來(lái)設(shè)置樣式,比如說(shuō)列表越來(lái)越長(zhǎng)的時(shí)候,我們可能需要調(diào)整間隔或者大小,來(lái)減少長(zhǎng)度,提升用戶的體驗(yàn)
例如當(dāng)列表項(xiàng)中共有4項(xiàng)的時(shí)候,選中所有列表,可以通過(guò)使用scss這種預(yù)處理器,編寫(xiě)mixin
代碼如下:
/*定義mixin*/ @mixin n-items($n) { &:first-child:nth-last-child(#{$n}), &:first-child:nth-last-child(#{$n}) ~ & { @content; } } /*調(diào)用方法*/ li { /*當(dāng)列表正好包含四項(xiàng)時(shí) 命中所有列表項(xiàng)*/ /*定義樣式*/ @include n-items(4) { width: 40px; height: 100px; background: red; float: left; margin: 10px; } }
效果如下:
4.根據(jù)兄弟元素的數(shù)量范圍匹配元素應(yīng)該場(chǎng)景同上,解決辦法也是編寫(xiě)mixin
例如,當(dāng)列表的總數(shù)是4或者更多時(shí),選中所有列表項(xiàng)
代碼如下:
/*定義mixin*/ @mixin n-items($n) { /*當(dāng)列表的總數(shù)是4或者更多時(shí),選中所有列表項(xiàng)*/ &:first-child:nth-last-child(#{$n + 4}), &:first-child:nth-last-child(#{$n + 4}) ~ & { @content; } } // 改寫(xiě)成 -n + 4 表示列表中有4個(gè)或者小于4時(shí),選中所有 // 同理,如2 ~ 6時(shí),設(shè)置 n + 2 ~ -n + 6 @mixin n-items($n) { &:first-child:nth-last-child(#{$n + 2}):nth-last-child(#{$ -n + 6}), &:first-child:nth-last-child(#{$n + 2}):nth-last-child(#{$ -n + 6}) ~ & { @content; } }5.滿幅的背景,定寬的內(nèi)容
頁(yè)面上有很多布局是那種內(nèi)容是固定寬的,背景是占滿整個(gè)視口的寬的,比如下面這種布局:
實(shí)現(xiàn)方式有很多種,一般我們實(shí)現(xiàn)的代碼結(jié)構(gòu)都是這種的:
/* css樣式*/ footer { background: "#333"; } .wrapper { max-width: 900px; margin: 1em auto; }
其中margin: 1em auto;就是為了讓內(nèi)容div居中,我們有一種更好的方式,只用一層DOM結(jié)構(gòu)實(shí)現(xiàn)上面的布局,就是使用calc這個(gè)屬性。
實(shí)現(xiàn)代碼如下:
/* css樣式*/ footer { background: "#333"; /* 當(dāng)瀏覽器不支持calc的時(shí)候回退一下*/ padding: 1em; padding: 1em calc(50% - 450px); }
原理:百分比是按照視口的寬度來(lái)解析的,所以即使里面的內(nèi)容不設(shè)置寬,也會(huì)給里面的內(nèi)容留出 450*2的空間,達(dá)到了之前設(shè)置 max-width: 900px;的效果。
6.垂直居中在css中水平居中比較簡(jiǎn)單,對(duì)于行級(jí)元素,對(duì)它的父元素使用text-align: center;對(duì)于塊級(jí)元素,就對(duì)它自身使用margin: auto;對(duì)于垂直居中比較難處理,目前的解決方法有:
1.基于絕對(duì)定位的方法(1) 當(dāng)元素是定寬高的時(shí)候:
div { width: 200px; height: 100px; position: absolute; top: 50%; left: 50%; margin-top: -50px; margin-left: -100px; }
通過(guò)calc代碼可以簡(jiǎn)化成下面這樣:
div { width: 200px; height: 100px; position: absolute; top: calc(50% - 50px); left: calc(50% - 100px); }
(2) 對(duì)于那些寬高不定的元素,實(shí)現(xiàn)方法如下:
div { position: absolute; top: 50%; left: 50%; transfrom: translate(-50%, -50%); }
以上方案也有一個(gè)弊端就是必須是絕對(duì)定位的元素。
2.基于視口單位的方法css3中定義了一些視口相關(guān)的單位:
vw 是與視口寬度相關(guān)的。1vw 實(shí)際上表示視口寬度的1%,而不是100%。
?
同樣,1vh表示視口高度的 1%
當(dāng)視口寬度小于高度時(shí),1vmin等于 1vw,否則等于 1vh。
當(dāng)視口寬度大于高度時(shí),1vmax等于 1vw,否則等于 1vh。
所以我們的垂直居中可以這樣實(shí)現(xiàn):
div { width: 200px; padding: 2px 4px; margin: 50vh auto 0; transform: translateY(-50%); } **注:這里不使用50%,而是視口單位的原因是,margin的百分比是以父元素的寬度作為解析基準(zhǔn)的,不論是margin-top or margin-left**
這種的方法是有局限性的,只能用在視口中居中的場(chǎng)景。
3.基于flex的方法這種應(yīng)該算是最佳的解決辦法:
實(shí)現(xiàn)方法:
body { display: flex; } div { margin: auto; }
當(dāng)使用flex布局時(shí),使用margin: auto; 在水平和垂直方向都會(huì)居中。在不指定width的情況下,width: max-content;
flexbox還有一個(gè)公共就是可以將匿名的容器(就是那些沒(méi)有被標(biāo)簽包住的文本節(jié)點(diǎn))垂直居中:
7.緊貼底部的頁(yè)腳textdiv { width: 100px; height: 50px; display: flex; align-items: center; justify-content: center; }
具有塊級(jí)樣式的頁(yè)腳,當(dāng)頁(yè)面內(nèi)容足夠長(zhǎng)的時(shí)候,頁(yè)腳會(huì)緊貼視口的底部;但是當(dāng)頁(yè)面內(nèi)容的長(zhǎng)度 < 視口height - 頁(yè)腳height的時(shí)候,頁(yè)腳就會(huì)緊貼在內(nèi)容的下面。一般的設(shè)計(jì)是給頁(yè)腳一個(gè)固定的height,這種顯然不健壯,在css3中有更好的解決方案。
(1) 最原始的固定高度的解決方案
html結(jié)構(gòu)如下:
hello
header { height: 10px } footer p { line-height: 1.5px; padding: 1px; margin: 1px; } this is ...
假設(shè)當(dāng)前的頁(yè)腳文字永遠(yuǎn)不會(huì)折行,可以計(jì)算當(dāng)前的頁(yè)腳的高度是:2 * 行高 + 3 * 段落垂直外邊距 + 頁(yè)腳垂直內(nèi)邊距 = 2 * 1.5px + 3 * 1px + 1px = 7px;
main { min-height: calc(100vh - 7px - 10px); /* 避免內(nèi)邊距或外邊距對(duì)高度記得算影響 */ border-sizing: border-box; }
當(dāng)header和main放在一個(gè)div里時(shí),css樣式可以直接寫(xiě)成 div{min-height: calc(100vh - 7px)};
這種方法的局限性是不允許文字折行,并且布局是這種簡(jiǎn)單的布局,并且每當(dāng)頁(yè)腳的尺寸變化時(shí),都需要跟著調(diào)整min-height的值。
(2)基于flex的解決方案
body { display: flex; flex-flow: columm; min-height: 100vh; /* 至少會(huì)占據(jù)整個(gè)視口的高度 */ } main { flex: 1; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/111888.html
摘要:網(wǎng)格單元格網(wǎng)格單元格是指四條網(wǎng)格線之間的空間。所以它是最小的單位,就像表格中的單元格。圖中突出顯示的網(wǎng)格區(qū)域是行線和列線之間的區(qū)域,其主要包括了四個(gè)網(wǎng)格單元格。 CSS Grid現(xiàn)在已經(jīng)被W3C納入到CSS3的一個(gè)布局模塊當(dāng)中,被稱為CSS Grid Layout Module。而我們較為熟悉的還是將其想像成網(wǎng)格或者柵格,也就是早期的960gs。不管是網(wǎng)格還是柵格或者現(xiàn)在的CSS Gr...
摘要:由一道面試題引發(fā)的思考從用戶輸入瀏覽器輸入到頁(yè)面最后呈現(xiàn)有哪些過(guò)程一道很常規(guī)的題目,考的是基本網(wǎng)絡(luò)原理,和瀏覽器加載,過(guò)程。所以抽出時(shí)間研究下瀏覽器渲染頁(yè)面的過(guò)程。 由一道面試題引發(fā)的思考: 從用戶輸入瀏覽器輸入url到頁(yè)面最后呈現(xiàn) 有哪些過(guò)程?一道很常規(guī)的題目,考的是基本網(wǎng)絡(luò)原理,和瀏覽器加載css,js過(guò)程。 答案大致如下: 用戶輸入U(xiǎn)RL地址 瀏覽器解析URL解析出主機(jī)名 瀏覽...
摘要:當(dāng)列表中至少包含四項(xiàng)時(shí),命中包括該項(xiàng)之后的所有列表項(xiàng)當(dāng)然,不止于此,的玩法完全取決于你的腦洞。而且絕對(duì)定位對(duì)整個(gè)布局的影響也太過(guò)強(qiáng)烈。如此,對(duì)于響應(yīng)布局也可以不用擔(dān)心了,雖然有點(diǎn)點(diǎn),但也算完美的解決了, title: 結(jié)構(gòu)與布局date: 2016-12-11tags: CSS Secrets 0x00 min-content 寬度自適應(yīng) CSS3 新增寬度屬性值 width:mi...
摘要:當(dāng)列表中至少包含四項(xiàng)時(shí),命中包括該項(xiàng)之后的所有列表項(xiàng)當(dāng)然,不止于此,的玩法完全取決于你的腦洞。而且絕對(duì)定位對(duì)整個(gè)布局的影響也太過(guò)強(qiáng)烈。如此,對(duì)于響應(yīng)布局也可以不用擔(dān)心了,雖然有點(diǎn)點(diǎn),但也算完美的解決了, title: 結(jié)構(gòu)與布局date: 2016-12-11tags: CSS Secrets 0x00 min-content 寬度自適應(yīng) CSS3 新增寬度屬性值 width:mi...
摘要:當(dāng)列表中至少包含四項(xiàng)時(shí),命中包括該項(xiàng)之后的所有列表項(xiàng)當(dāng)然,不止于此,的玩法完全取決于你的腦洞。而且絕對(duì)定位對(duì)整個(gè)布局的影響也太過(guò)強(qiáng)烈。如此,對(duì)于響應(yīng)布局也可以不用擔(dān)心了,雖然有點(diǎn)點(diǎn),但也算完美的解決了, title: 結(jié)構(gòu)與布局date: 2016-12-11tags: CSS Secrets 0x00 min-content 寬度自適應(yīng) CSS3 新增寬度屬性值 width:mi...
摘要:代碼如下頁(yè)面內(nèi)容樣式接下來(lái),將側(cè)邊欄和主內(nèi)容區(qū)域使用一個(gè)包含起來(lái)。列和行布局部分橫跨所有的列。也可以使用簡(jiǎn)寫(xiě),起始值和結(jié)束值位于同一行上,并用斜杠分隔。設(shè)計(jì)方法總結(jié)以上的布局設(shè)計(jì)中,使用了來(lái)進(jìn)行整體布局以及設(shè)計(jì)中的非線性部分。 CSS 浮動(dòng)屬性一直是網(wǎng)站上排列元素的主要方法之一,但是當(dāng)實(shí)現(xiàn)復(fù)雜布局時(shí),這種方法不總是那么理想。幸運(yùn)的是,在現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)時(shí)代,使用 Flexbox 和 CSS...
閱讀 2567·2023-04-25 20:05
閱讀 2891·2023-04-25 17:56
閱讀 2207·2021-10-14 09:49
閱讀 2689·2019-08-29 15:10
閱讀 2928·2019-08-29 12:25
閱讀 425·2019-08-28 18:23
閱讀 763·2019-08-26 13:26
閱讀 1376·2019-08-23 18:21