亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

我們是否想過(guò)沒(méi)有css對(duì)html標(biāo)簽元素的影響,那么我們的標(biāo)簽在瀏覽器是什么樣形式存在的?CSS對(duì)HTML標(biāo)簽元素到底產(chǎn)生了什么影響?又做了什么規(guī)則限定?來(lái)聊聊吧!!!

溫故而知我不懂的CSS

 

CSS 作為一門標(biāo)記性語(yǔ)言,但是它的簡(jiǎn)單易學(xué),很多開(kāi)發(fā)者都不知道它是一門語(yǔ)言,語(yǔ)言的東西必定具備諸多概念,但是我們會(huì)往往忽略這些概念,確實(shí),就算你不知道這些概念,你僅僅知道這些樣式是干什么的,都能寫出一張復(fù)雜的頁(yè)面,所以我們不止要做到會(huì)用,而且要理解實(shí)質(zhì)性的原理而不是只知道這些樣式是僅僅做什么的,所以痛定思痛,好好溫故而知新吧

流(Normal flow)

Normal flow直譯為正常流,但是為什么稱為文檔流,倒是很好奇,會(huì)給人別人容易產(chǎn)生誤會(huì),所以一下的介紹中,我們都是以流的形式稱呼

流:“流”實(shí)際上是 CSS世界中的一種基本的定位和布局機(jī)制,可以理解為現(xiàn)實(shí)世界的一套物理規(guī)則,“流”跟現(xiàn)實(shí)世界的“水流”有異曲同工的表現(xiàn)。

CSS世界

有同學(xué)可能聽(tīng)到CSS世界這個(gè)概念似懂非懂,這個(gè)概念出自**張?chǎng)涡翊罄械摹禖SS世界》**,我的理解是世界就是一張我們布局完的網(wǎng)頁(yè),而如何形成這個(gè)世界就是CSS去規(guī)定的

那通過(guò)這個(gè)流我們來(lái)理解CSS的元素在這個(gè)流是怎么布局的,首先來(lái)看看CSS流布局(你可以理解為標(biāo)簽元素在流默認(rèn)以什么形式布局的)中,我們的HTML的<div>和<span>正好是CSS中塊級(jí)元素和內(nèi)聯(lián)級(jí)元素的代表,你可以把div理解成水,span是木塊,如圖:

溫故而知我不懂的CSS

 

舉個(gè)例子:

舉個(gè)例子:

效果圖:

溫故而知我不懂的CSS

 

上述的div占滿了一整行(沒(méi)有聲明width:100%的情況下),像水一樣鋪滿容器,而span則是像木頭一樣依次排列

所以總結(jié)一句:所謂“流”,就是CSS中引導(dǎo)元素排列和定位的一條看不見(jiàn)的“水流”,在這個(gè)流中,我們的塊級(jí)元素和內(nèi)聯(lián)級(jí)元素默認(rèn)都有與其對(duì)應(yīng)的排列和定位

流是如何影響整個(gè)CSS世界的

CSS2.1 時(shí)代,我們直接稱 CSS 為“流的世界”真是一點(diǎn)兒也不為過(guò),整個(gè) CSS 世界幾乎就是圍繞“流”來(lái)建立的,那么流是如何影響整個(gè) CSS 世界的呢?

  • 因?yàn)?CSS 世界的基石是 HTML,所以只要讓 HTML **默認(rèn)**的表現(xiàn)符合“流”,那么整個(gè) CSS 世界就可以被“流”統(tǒng)治,而事實(shí)就是如此!
  • 特殊布局與流的破壞。如果全部都是以默認(rèn)的“流”來(lái)渲染,我們只能實(shí)現(xiàn)類似 W3C 那樣的文檔網(wǎng)頁(yè),但是,實(shí)際的網(wǎng)頁(yè)是有很多復(fù)雜的布局的,怎么辦?可以通過(guò)破壞“流”來(lái)實(shí)現(xiàn)特殊布局。實(shí)際上,還是和“流”打交道。
  • 流向的改變。默認(rèn)的流向是“一江春水向東流”,以及“飛流直下三千尺”。然而,這 種流向我們是可以改變的,可以讓CSS的展現(xiàn)更為豐富。??因此,“文檔流從左往右自上而下”這種說(shuō)法是不嚴(yán)謹(jǐn)?shù)?,大家一定要糾正過(guò)來(lái)。

什么是流體布局

??流體布局不是什么新技術(shù),實(shí)際開(kāi)發(fā)中我們已經(jīng)百分百使用過(guò)的,而且是必備的技巧

世界的形成需要我們?nèi)ゴ罱?布局),在流的世界中當(dāng)然用流的方式去搭建(布局)了,所謂“流體布局”,指的是利用元素“流”的特性實(shí)現(xiàn)的各類布局效果。因?yàn)?ldquo;流”本身具有自適應(yīng)特性,所以“流體布局”往往都是具有自適應(yīng)性的。但是,“流體布局”并不等同于 “自適應(yīng)布局”。“自適應(yīng)布局”是對(duì)凡是具有自適應(yīng)特性的一類布局的統(tǒng)稱,“流體布局”要狹窄得多。例如,表格布局也可以設(shè)置為100%自適應(yīng),但表格和“流”不是一路的,并不屬于“流體布局”

溫故而知我不懂的CSS

 

比如上述這個(gè)demo就是流體布局的一種體現(xiàn)

CSS 中最常用的魔法石,也就是最常使用的 HTML 標(biāo)簽,是<div>,而<div>是典型的 具有“流”特性的元素,因此,曾經(jīng)風(fēng)靡的“DIV+CSS 布局”,實(shí)際上指的就是這里的“流體 布局”。

CSS 新世界——CSS3

布局更為豐富

  • 移動(dòng)端的崛起,催生了 CSS3 媒介查詢以及許多響應(yīng)式布局特性的出現(xiàn),如圖片元素 的 srcset 屬性、CSS 的 object-fit 屬性
  • 彈性盒子布局(flexible box layout)終于熬出了頭
  • 格柵布局(grid layout)姍姍來(lái)遲

視覺(jué)表現(xiàn)長(zhǎng)足進(jìn)步

  • 圓角、陰影和漸變讓元素更有質(zhì)感
  • transform 變換讓元素有更多可能。
  • filter 濾鏡和混合模式讓 Web 輕松變成在線的 Photoshop;
  • animation 讓動(dòng)畫變得非常簡(jiǎn)單

盒模型

??假設(shè)我們HTMl標(biāo)簽元素在沒(méi)有CSS的影響下,是以什么形式存在的,有人可能會(huì)想到以盒子形式存在的,實(shí)際則不然,HTMl標(biāo)簽元素在瀏覽器中具體的存在形式是被CSS所定義的,也就是說(shuō)的盒模型,就相當(dāng)于出來(lái)一種MSS標(biāo)記性語(yǔ)言(虛擬的語(yǔ)言)定義HTML標(biāo)簽元素為圓形模型

MDN是這樣定義的:CSS 基礎(chǔ)框盒模型是 CSS 規(guī)范的一個(gè)模塊,它定義了一種長(zhǎng)方形的盒子——包括它們各自的內(nèi)邊距(padding)與外邊距(margin ),并根據(jù)視覺(jué)格式化模型(算法機(jī)制)來(lái)生成元素,對(duì)其進(jìn)行布置、編排、布局(lay out)。常被直譯為盒子模型、盒模型或框模型。

??HTML標(biāo)簽元素在CSS規(guī)則下是盒子形式存在,如果沒(méi)有被CSS影響,HTML標(biāo)簽元素可能不是以盒子形式存在,并且,CSS世界存在流(CSS世界中的一種基本的定位和布局機(jī)制),在流的多個(gè)規(guī)則下,盒子就具備不同的規(guī)則,不同的規(guī)則(比如BFC、IFC、FFC、GFC)影響著盒子的排列,所以我們把這種盒子也叫做正常流的盒子我們會(huì)在CSS規(guī)則中講到

舉個(gè)例子:

  .demo {
      height: 100px;
      background: lightblue;
    }
  </style>
  <body>
    <div class="demo">div</div>
  </body>
溫故而知我不懂的CSS

 

如的圖可以看出,這個(gè)就是盒模型

盒模型分為IE盒模型和W3C標(biāo)準(zhǔn)盒模型。我們?cè)谙旅鏁?huì)講述到,先來(lái)看看盒子是怎么形成的吧

視覺(jué)格式化模型(visual formatting model)

??視覺(jué)格式化模不是一種盒模型類型,而是一種算法機(jī)制,具體可以去看看W3C

CSS 視覺(jué)格式化模型(visual formatting model)是用來(lái)處理和在視覺(jué)媒體上顯示文檔時(shí)使用的計(jì)算規(guī)則。該模型是 CSS 的基礎(chǔ)概念之一

 

盒子的生成

MDN解釋:盒子的生成是 CSS 視覺(jué)格式化模型的一部分,用于從文檔元素生成盒子。盒子有不同的類型,不同類型的盒子的格式化方法(也叫格式化上下文)也有所不同。盒子的類型取決于 CSS display 屬性。

??我們來(lái)理解上面這句話吧,盒子的生成是通過(guò)視覺(jué)格式化模型,而生成的盒子處于格式化上下文,因?yàn)橛胁煌母袷交舷挛?格式化上下文(formatting context) 是定義 盒子環(huán)境 的規(guī)則,不同 格式化上下文(formatting context)下的盒子有不同的表現(xiàn)。也就是盒子通過(guò)視覺(jué)格式化模型出生,出生后被一種規(guī)則限制,可能有同學(xué)對(duì)格式化上下文有點(diǎn)難以理解,沒(méi)關(guān)系,我也懵逼,所以接下來(lái)會(huì)在CSS規(guī)則章節(jié)講到

W3C 標(biāo)準(zhǔn)盒模型:

屬性width,height只包含內(nèi)容content,不包含border和padding。

舉個(gè)例子:

<style>
    .demo {
      width: 200px;
      height: 100px;
      padding: 20px 20px;
      background: lightblue;
      border: 10px solid red;
    }
</style>
  <body>
    <div class="demo">div</div>
  </body>

效果圖:

溫故而知我不懂的CSS

 

可以看到標(biāo)準(zhǔn)盒模型中, width = 內(nèi)容的寬度、height = 內(nèi)容的高度,如上圖中height等于內(nèi)容的高度為100px,width等于內(nèi)容的寬度為100px

IE盒模型:

屬性width,height包含border和padding,指的是content+padding+border。

舉個(gè)例子:

.demo {
      box-sizing: border-box; /* 代表為IE盒模型 */
      width: 200px;
      height: 100px;
      padding: 20px 20px;
      background: lightblue;
      border: 10px solid red;
    }
  </style>
  <body>
    <div class="demo">div</div>
  </body>

效果圖:

溫故而知我不懂的CSS

 

可以看到,IE盒模型中,width = border + padding + 內(nèi)容的寬度,height = border + padding + 內(nèi)容的高度,如上圖height = border 10px*2+ padding20px*2 + 內(nèi)容的高度40px=100px,width = border 10px*2 + padding 20px*2+ 內(nèi)容的寬度 140px=200px

box-sizing屬性更改盒模型

??CSS 中的 box-sizing屬性定義了user agent應(yīng)該如何計(jì)算一個(gè)元素的總寬度和總高度。

IE模型不是一無(wú)所用,開(kāi)發(fā)中我們有時(shí)候會(huì)改變padding的值,這樣會(huì)影響到整個(gè)盒子的區(qū)域面積,我們還得手動(dòng)計(jì)算改width或者h(yuǎn)eight,這樣顯然影響效率,這時(shí)候IE盒模型的作用就來(lái)了,我們只要按照設(shè)計(jì)師給的盒子固定區(qū)域,寫死,給我寫死就行?。?!,我們將盒子轉(zhuǎn)化為IE盒模型,我們不管怎么改變padding或者border,區(qū)域面積永遠(yuǎn)固定在哪里

box-sizing:content-box /*(標(biāo)準(zhǔn)盒模型)*/
box-sizing:border-box /*(IE盒模型)*/

在ie8+瀏覽器中使用哪個(gè)盒模型可以由box-sizing(CSS新增的屬性)控制,默認(rèn)值為content-box,即標(biāo)準(zhǔn)盒模型;如果將box-sizing設(shè)為border-box則用的是IE盒模型。如果在ie6,7,8中DOCTYPE缺失會(huì)觸發(fā)IE模式。在當(dāng)前W3C標(biāo)準(zhǔn)中盒模型是可以通過(guò)box-sizing自由的進(jìn)行切換的

CSS流的規(guī)則

“流”之所以影響了整個(gè) CSS 世界,就是因?yàn)橛绊懥?CSS 世界的基石 HTML。那具體是如何影響的呢?

什么是格式化上下文(Fatting context)

前面我們反復(fù)講到的格式化上下文到底是什么東東?查閱了W3C得到的是這句話:Boxes in the normal flow belong to a formatting context意思是正常流的盒子屬于格式化上下文,前面我們講到不同 格式化上下文(formatting context)下的盒子有不同的表現(xiàn),我們知道正常流的盒子屬于格式化上下文,那么格式化上下文就是制定規(guī)則的區(qū)域,那么大家想想,想到規(guī)則會(huì)想起CSS的誰(shuí)?也就是流, 在我的理解里:。FC就是我們的流,它是頁(yè)面中的一塊渲染區(qū)域,有一套渲染規(guī)則如何理解塊級(jí)格式化上下文BFC(block formatting context)?,那么流中具有不同的規(guī)則,比如BFC、IFC、FFC、GFC,下面我們逐個(gè)擊破它們吧

塊級(jí)元素和內(nèi)聯(lián)級(jí)元素

在講塊級(jí)元素和內(nèi)聯(lián)元素之前,我們會(huì)這樣想塊級(jí)元素:總是獨(dú)占一行,表現(xiàn)為另起一行開(kāi)始,而且其后的元素也必須另起一行顯示,內(nèi)聯(lián)元素:和相鄰的內(nèi)聯(lián)元素在同一行,的確可以這樣理解,但是有沒(méi)有想過(guò)就是這些元素為什么會(huì)具備這些屬性?與其說(shuō)具備這些屬性,倒不如說(shuō)HTML標(biāo)簽元素被不同的規(guī)則所影響,導(dǎo)致?lián)碛胁煌膶傩?/p>

HTML 常見(jiàn)的標(biāo)簽有<div>、<p>、<li>和<table>以及<span>、<img>、<strong> 和<em>等。雖然標(biāo)簽種類繁多,但通常我們就把它們分為兩類:塊級(jí)元素(block-level element)和內(nèi)聯(lián)元素(inline element)。

多年開(kāi)發(fā)老碼農(nóng)福利贈(zèng)送:網(wǎng)頁(yè)制作,網(wǎng)站開(kāi)發(fā),web前端開(kāi)發(fā),從最零基礎(chǔ)開(kāi)始的的HTML+CSS+JAVAScript。jQuery,Vue、React、Ajax,node,angular框架等到移動(dòng)端小程序項(xiàng)目實(shí)戰(zhàn)【視頻+工具+電子書+系統(tǒng)路線圖】都有整理,需要的伙伴可以私信我,發(fā)送“前端”等3秒后就可以獲取領(lǐng)取地址,送給每一位對(duì)編程感興趣的小伙伴

分享到:
標(biāo)簽:CSS
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定