成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《CSS世界》筆記四:流的保護(hù)與破壞

he_xd / 3334人閱讀

摘要:和可以看作是同父異母的兄弟關(guān)系。例子如下結(jié)果如下而父元素設(shè)置屬性的方式則是利用了的特性下面將會(huì)詳細(xì)講解結(jié)界全稱為,中文為塊級格式化上下文。

上一篇:《CSS世界》筆記三:內(nèi)聯(lián)元素與對齊
下一篇:《CSS世界》筆記五:CSS層疊規(guī)則及元素隱藏

寫在前面

原本博客名為“浮動(dòng)與定位”,但是《CSS世界》第六章節(jié)的內(nèi)容不僅有浮動(dòng)定位,很大一部分篇幅都在講BFC和overflow。更吸引人的是,作者將float/absolute/relative形容為“魔界三兄弟”,將原本枯燥的理論知識(shí)硬生生變成了玄幻小說。

absolutefloat可以看作是“同父異母”的兄弟關(guān)系。它們的父親是同一個(gè)人,是CSS世界的大魔王,屬于魔界;但母親不是一個(gè)人,absolute的母親來自魔界,而 float的母親來自人界

如果說floatabsolute是同父異母的兄弟關(guān)系,那么relative則是absolute的親大哥

當(dāng)年魔界圣母position生了好幾個(gè)兒子,其中一個(gè)就是法力很強(qiáng)也很霸道的absolute,考慮到日后absolute會(huì)找float的麻煩而去正常流世界,以其個(gè)性和霸道的能力,一定會(huì)影響正常流世界的秩序,于是圣母position讓其性格敦實(shí)的大兒子relative直接在正常流世界生活,幫忙盯著absolute,不要讓absolute這個(gè)小魔鬼到處惹是生非

一、浮動(dòng)float與BFC 1.1 浮動(dòng)

浮動(dòng)本質(zhì):實(shí)現(xiàn)文字環(huán)繞效果

現(xiàn)階段使用浮動(dòng)一般是用來實(shí)現(xiàn)盒子水平顯示(左右兩欄布局),但是往往會(huì)造成浮動(dòng)元素父盒子的塌陷;那么應(yīng)該如何清除浮動(dòng)的影響呢?

網(wǎng)上隨意百度即可查詢到清除浮動(dòng)的方法:

父元素設(shè)置overflow屬性來清除浮動(dòng)

使用額外標(biāo)簽法

偽元素清除

上面2、3兩種方法都是用clear進(jìn)行清除,而clear清除浮動(dòng)屬性本質(zhì):clear 屬性是讓自身不能和前面的浮動(dòng)元素相鄰,從而做到了清除浮動(dòng)的效果。例子如下:

/* ul>li*7 */

li {
    width: 20px;
    height: 20px;
    background-color: #ccc;
    margin: 5px;
    float: left;
}
li:nth-of-type(3) {
    clear: both;
}

結(jié)果如下:

而“父元素設(shè)置overflow屬性”的方式則是利用了BFC的特性(下面將會(huì)詳細(xì)講解)

1.2 結(jié)界BFC

BFC全稱為block formatting context,中文為“塊級格式化上下文”。相對應(yīng)的還有IFC,也就是inline formatting context,中文為“內(nèi)聯(lián)格式化上下”

BFC表現(xiàn)原則:如果一個(gè)元素具有 BFC,內(nèi)部子元素再怎么翻江倒海、翻云覆雨,都不會(huì)影響外部的元素。所以,BFC 元素是不可能發(fā)生 margin 重疊的,因?yàn)?margin 重疊是會(huì)影響外面的元素的;BFC 元素也可以用來清除浮動(dòng)的影響,因?yàn)槿绻磺宄釉馗?dòng)則父元素高度塌陷,必然會(huì)影響后面元素布局和定位,這顯然有違 BFC 元素的子元素不會(huì)影響外部元素的設(shè)定

如何觸發(fā)BFC:

根元素

float 的值不為 none

overflow 的值為 auto、scroll 或 hidden

display 的值為 table-cell、table-caption 和 inline-block 中的任何一個(gè)

position 的值不為 relative 和 static

因此:只要滿足上面任何一條(觸發(fā)了BFC),元素就不會(huì)發(fā)生margin重疊和float帶來的“高度塌陷”問題

張大大布拉布拉用了大量的篇幅對比了實(shí)現(xiàn)BFC的各種方式,最后得出結(jié)論:overflow:hidden是觸發(fā)BFC最理想副作用最小的方式

1.3 float+BFC實(shí)現(xiàn)健壯的兩欄布局

我是帥哥,好巧啊,我也是帥哥,原來看這篇博客的人都是帥哥~

.father { max-width: 200px; border: 1px solid #444; } .father img { float:left; width: 60px; margin-right: 10px; } .bfc { overflow: hidden; }

展示如下:

原理:利用BFC的結(jié)界特性避免了文字環(huán)繞(浮動(dòng)),實(shí)現(xiàn)左側(cè)固定,右側(cè)自適應(yīng)的兩欄布局

二、overflow屬性

再次聲明:overflow:hidden是觸發(fā)BFC的最佳結(jié)界

2.1 overflow與滾動(dòng)條

滾動(dòng)條相關(guān)知識(shí)

移動(dòng)端的屏幕尺寸本身就有限,滾動(dòng)條一般都是懸浮模式,不會(huì)占據(jù)可用寬度,但是在PC端,尤其Windows操作系統(tǒng)下,幾乎所有瀏覽器的滾動(dòng)欄都會(huì)占據(jù)寬度,而且這個(gè)寬度大小是固定的

如何獲取瀏覽器滾動(dòng)欄寬度

.box { width: 400px; overflow: scroll; } console.log(400 - document.getElementById("in").clientWidth);

自定義滾動(dòng)條屬性

整體部分,::-webkit-scrollbar;

兩端按鈕,::-webkit-scrollbar-button;

外層軌道,::-webkit-scrollbar-track;

內(nèi)層軌道,::-webkit-scrollbar-track-piece;

滾動(dòng)滑塊,::-webkit-scrollbar-thumb;

邊角,::-webkit-scrollbar-corner。

平時(shí)開發(fā)中比較常用的三個(gè)屬性

::-webkit-scrollbar { /* 血槽寬度 */
    width: 8px;
    height: 8px;
}
::-webkit-scrollbar-thumb { /* 拖動(dòng)條 */
    background-color: rgba(0,0,0,.3);
    border-radius: 6px;
}
::-webkit-scrollbar-track { /* 背景槽 */
    background-color: #ffffd;
    border-radius: 6px;
}

小技巧:處理頁面滾動(dòng)條晃動(dòng)問題(一般出現(xiàn)在加載數(shù)據(jù)后超過一屏)

html {
    overflow-y: scroll; /* for IE8 */
}
:root {
    overflow-y: auto;
    overflow-x: hidden;
}
:root body {
    position: absolute;
}
body {
    width: 100vw;
    overflow: hidden;
}
2.2 overflow與文本溢出點(diǎn)點(diǎn)點(diǎn)

單行文本溢出:

.ell {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

多行文本溢出(此處為2行):

.ell-rows-2 {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}
2.3 overflow與錨點(diǎn)定位

兩種情況可以觸發(fā)錨點(diǎn)定位行為的發(fā)生:

(1)URL地址中的錨鏈與錨點(diǎn)元素對應(yīng)并有交互行為;

發(fā)展歷程>

發(fā)展歷程

利用上面的結(jié)構(gòu),點(diǎn)擊a標(biāo)簽,能夠使頁面滾動(dòng)到h2處

(2)focus 錨點(diǎn)定位,可focus的錨點(diǎn)元素處于focus狀態(tài)

“focus 錨點(diǎn)定位”指的是類似鏈接或者按鈕、輸入框等可以被 focus 的元素在被 focus 時(shí)發(fā)生的頁面重定位現(xiàn)象。舉個(gè)很簡單的例子,在 PC 端,我們使用 Tab 快速定位可 focus 的元素的時(shí)候,如果我們的元素正好在屏幕之外,瀏覽器就會(huì)自動(dòng)重定位,將這個(gè)屏幕之外的元素定位到屏幕之中

錨點(diǎn)定位的兩個(gè)小案例,以供參考:

錨點(diǎn)定位:返回頁面頂部

錨點(diǎn)定位:簡易tab切換

注意!注意!注意!元素設(shè)置了 overflow:hidden 聲明,里面內(nèi)容高度溢出的時(shí)候,滾動(dòng)依然存在,僅僅滾動(dòng)條不存在!,所以我們能用錨點(diǎn)定位或者js控制滾動(dòng)

三、絕對定位absolute 3.1 absolute的包含塊

(1)塊級元素:相對于第一個(gè)position不為static的祖先元素,直到html

(2)行內(nèi)元素:

單行:假設(shè)給內(nèi)聯(lián)元素的前后各生成一個(gè)寬度為 0 的內(nèi)聯(lián)盒子(inline box),則這兩個(gè)內(nèi)聯(lián)盒子的 padding box 外面的包圍盒就是內(nèi)聯(lián)元素的“包含塊”

多行:未定義行為,我們以chrome表現(xiàn)為主(由第一行開頭和最后一行結(jié) 尾的內(nèi)聯(lián)盒子共同決定)

直接看概念一般是一頭霧水,上圖吧(紅色虛線區(qū)域?yàn)榘瑝K)

案例:基于行內(nèi)元素定位的tips實(shí)現(xiàn)

.icon { margin: 50px 0 0 50px; display: inline-block; width: 20px; height: 20px; background: url(http://demo.cssworld.cn/images/6/delete.png) no-repeat center; } .tip { position: relative; &::before, &::after { position: absolute; transform: translateX(-50%); left: 50%; visibility: hidden; } &::before { content: attr(data-title); top: -33px; padding: 2px 10px 3px; line-height: 18px; border-radius: 2px; background-color: #333; text-align: left; color: #fff; font-size: 12px; /* 必須加,否則一柱擎天 */ white-space: nowrap; } &::after { content: ""; border: 6px solid transparent; border-top-color: #333; top: -10px; } &:hover::before, &:hover::after { transition: visibility .1s .1s; visibility: visible; } }

最終實(shí)現(xiàn)效果:

3.2 absolute無依賴定位

注意:absolute 是非常獨(dú)立的 CSS 屬性值,其樣式和行為表現(xiàn)不依賴其他任何 CSS 屬性就可以完成,正是基于這一點(diǎn)才有了無依賴定位的強(qiáng)大

首先思考一個(gè)問題:如果一個(gè)標(biāo)準(zhǔn)流元素后面接著一個(gè)absolute元素(未設(shè)置left等方位屬性),此時(shí)如何顯示?定位元素后又接著一個(gè)標(biāo)準(zhǔn)流元素,此時(shí)又該如何顯示?

哈哈,我在定位元素前面 吶!我還在定位元素后面呢
.poa { position: absolute; width: 20px; height: 20px; background: rgba(255, 0, 0, .5); }

展示結(jié)果:

僅設(shè)置絕對定位時(shí),定位元素仍會(huì)保持在html結(jié)構(gòu)位置,且不占據(jù)空間。由此,我們可以使用margin相對于原始位置定位該元素以實(shí)現(xiàn)各種功能。下面是幾個(gè)案例:

(1)案例1:簡單圖標(biāo)定位

.icon-hot {
    position: absolute;
    width: 28px;
    height: 11px;
    margin: -6px 0 0 2px;
}

(2)案例2:校驗(yàn)表單

/* 郵箱報(bào)錯(cuò)小圖標(biāo) */
.icon-warn {
    position: absolute;
    margin-left: -18px;
    width: 16px; height: 20px;
    background: url(/images/6/warn.gif) no-repeat center;
}

/* 定位在盒子外部的紅色星號(hào) */
.regist-star {
    position: absolute;
    margin-left: -1em;
    font-family: simsun;
    color: #f30;
}

(3)案例3:input中的icon和下拉

/* 搜索按鈕的無依賴絕對定位 */
.search-btn {
    width: 20px; height: 20px;
    border: 9px solid #fff;
    background: #ffffd url(search.png) no-repeat center;
    position: absolute; margin: 1px 0 0 -40px;
}

/* 下拉列表的無依賴絕對定位 */
.search-datalist {
    position: absolute;
    width: 248px;
    border: 1px solid #e6e8e9;
    background-color: #fff;
}
3.3 absolute + text-align用法

text-align 居然可以改變 absolute 元素的位置

p { text-align: center; } img { position: absolute; }

原理:img前的“幽靈空白節(jié)點(diǎn)”受text-align:center;的影響居中,圖片的“無依賴絕對定位”在“幽靈空白節(jié)點(diǎn)”后面

案例:text-align實(shí)現(xiàn)的右外側(cè)定位

.constrcons { width: 80%; margin: auto; background-color: #f0f3f9; } .alignright { height: 0; text-align: right; overflow: hidden; } .alignright:before { content: "2002"; } .follow { position: fixed; bottom: 100px; z-index: 1; } .follow > img { display: block; margin: 10px; }

優(yōu)勢:icon相對于主體內(nèi)容定位,而不是相對于html

3.4 absolute + clip用法

剪裁屬性 clip 要想起作用,元素必須是絕對定位或者固定定位,也就是 position 屬性值必須是 absolute 或者 fixed

最佳可訪問性隱藏

.clip {
    position: absolute;
    clip: rect(0 0 0 0);
}
采用這種方法隱藏的元素原本的行為特性也很好用。例如,依然可以被 focus,而且非常難得的是就地剪裁,因?yàn)閷儆凇盁o依賴的絕對定位”
3.5 absolute流體特性

當(dāng) absolute 遇到 left/top/right/bottom 屬性的時(shí)候,absolute 元素才真正變成絕對定位元素

absolute流體特性的條件是:對立方向同時(shí)發(fā)生定位的時(shí)候

如果設(shè)置left:0; right:0;表現(xiàn)為格式化寬度,水平方向保持流動(dòng)性

如果設(shè)置top:0; bottom:0;表現(xiàn)為格式化高度,垂直方向保持流動(dòng)性

絕對定位元素的margin:auto的填充規(guī)則和普通流體元素的一模一樣:

如果一側(cè)定值,一側(cè) auto,auto 為剩余空間大小;

如果兩側(cè)均是 auto,則平分剩余空間。

案例:利用absolute的流體特性實(shí)現(xiàn)元素的水平垂直居中

.element {
    width: 300px;
    height: 200px;
    position: absolute;
    left: 0; right: 0; top: 0; bottom: 0;
    margin: auto;
}
四、總結(jié)

浮動(dòng)float以及clear屬性

BFC觸發(fā)條件及利用BFC實(shí)現(xiàn)更為健壯的布局

overflow屬性

內(nèi)聯(lián)盒子絕對定位的包含塊

absolute無依賴定位

absolute裁剪及流體特性

上一篇:《CSS世界》筆記三:內(nèi)聯(lián)元素與對齊
下一篇:《CSS世界》筆記五:CSS層疊規(guī)則及元素隱藏

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/113680.html

相關(guān)文章

  • CSS世界筆記五:CSS層疊規(guī)則及元素隱藏

    摘要:元素層疊順序補(bǔ)充說明位于最下面的特指層疊上下文元素后面會(huì)詳解的邊框和背景色。界中可能有其他的層疊結(jié)界,而自身也可能處于其他層疊結(jié)界中。 上一篇:《CSS世界》筆記四:流的保護(hù)與破壞 寫在前面 《CSS世界》這本書還剩六章,但是這本書的精華部分主要是前面的內(nèi)容,這里僅把后面章節(jié)相對重要的內(nèi)容以博客展示,想著了解更多的小伙伴還是去閱讀原文的好,畢竟三百多頁的一本書并不是小小幾篇博客能完全說...

    godruoyi 評論0 收藏0
  • CSS世界筆記三:內(nèi)聯(lián)元素對齊

    摘要:上一篇世界筆記二盒模型四大家族下一篇世界筆記四流的保護(hù)與破壞寫在前面在頁面布局中,內(nèi)聯(lián)元素的垂直對齊是比較常見和基礎(chǔ)的布局需求,但是我們往往會(huì)因?yàn)榇怪睂R中的,而頭疼不已。 上一篇:《CSS世界》筆記二:盒模型四大家族下一篇:《CSS世界》筆記四:流的保護(hù)與破壞 寫在前面 在頁面布局中,內(nèi)聯(lián)元素的垂直對齊是比較常見和基礎(chǔ)的布局需求,但是我們往往會(huì)因?yàn)榇怪睂R中的1px,2px而頭疼不已...

    HtmlCssJs 評論0 收藏0
  • CSS世界(文檔)

    摘要:整理完了高性能這本書,往下就需要快速處理世界,這本講解特性的書非常值得一讀,內(nèi)容完整,重點(diǎn)突出,實(shí)戰(zhàn)性強(qiáng),就是語言啰嗦。由于全書內(nèi)容太多,而且需要一點(diǎn)一點(diǎn)的整理,所以放到了站點(diǎn)上,方便大家查看。 整理完了《高性能JavaScript》這本書,往下就需要快速處理《CSS世界》,這本講解CSS特性的書非常值得一讀,內(nèi)容完整,重點(diǎn)突出,實(shí)戰(zhàn)性強(qiáng),就是語言啰嗦。由于全書內(nèi)容太多,而且需要一點(diǎn)一...

    CNZPH 評論0 收藏0
  • 【學(xué)習(xí)筆記CSS深入理解之a(chǎn)bsolute

    摘要:張鑫旭的深入理解之學(xué)習(xí)筆記絕對定位的特性絕對定位與浮動(dòng)相似,都有破壞性和包裹性。利用絕對定位元素脫離文檔流的特性,使用動(dòng)畫可以避免大范圍的回流和重繪。絕對定位元素拉伸實(shí)現(xiàn)寬高自適應(yīng),可應(yīng)用于大范圍的布局。 《張鑫旭的CSS深入理解之a(chǎn)bsolute》學(xué)習(xí)筆記 絕對定位的特性 絕對定位與浮動(dòng)相似,都有破壞性和包裹性。浮動(dòng)的一些應(yīng)用場景中也可用絕對定位替代 絕對定位的行為表現(xiàn) 無依賴絕對...

    Anleb 評論0 收藏0
  • 重塑你的CSS世界觀——浮動(dòng)魔鬼float

    摘要:而在文檔流中,如果浮動(dòng)元素和跟隨元素都是元素,它們兩在默認(rèn)情況下都將占據(jù)一行。而由于浮動(dòng)元素脫離了文檔流,如果父元素沒有指定高度或者其他元素?fù)纹?,也就出現(xiàn)了所謂的浮動(dòng)元素的父元素高度塌陷。 為什么要寫《重塑你的CSS世界觀》系列文章 由于從工作到現(xiàn)在,我的主要工作都是寫JavaScript,幾乎沒怎么碰CSS,通常都是別人寫好界面,然后我來開發(fā)JavaScript邏輯代碼,這導(dǎo)致了嚴(yán)重...

    joyqi 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<