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

資訊專欄INFORMATION COLUMN

12個你未必知道的CSS小知識

Caizhenhao / 1078人閱讀

摘要:如果你并不是一個特別有經(jīng)驗的程序員,我相信你未必知道屬性除了能用在文本顯示,還可以用作其它地方。說實話,估計這個值很少人會使用它,但你要知道確實可以使用這樣的一個值,如果以前不知道它,那么,現(xiàn)在,在有些罕見的地方,你也許就會變得聰明一點了。

雖然CSS并不是一種很復(fù)雜的技術(shù),但就算你是一個使用CSS多年的高手,仍然會有很多CSS用法/屬性/屬性值你從來沒使用過,甚至從來沒聽說過。

1.CSS的color屬性并非只能用于文本顯示

對于CSS的color屬性,相信所有Web開發(fā)人員都使用過。如果你并不是一個特別有經(jīng)驗的程序員,我相信你未必知道color屬性除了能用在文本顯示,還可以用作其它地方。

你可以先看一下下面的演示:

HTML代碼

Example alt text
  • Example list item
  1. Example list item

CSS代碼

body {
  color: yellow;
  background: #444;
  font-size: 20px;
  font-family: Arial, sans-serif;
  text-align: center;
}

ul {
  border: solid 2px;
  text-align: left;
}

ol {
  text-align: left;
}

hr {
  border-color: inherit;
}

http://jsfiddle.net/c0501uL5/3/embedded/result/

請注意,上面的代碼里只使用了一個color屬性,就是在body元素上,設(shè)置成了yellow。但是,你也看到了,所有這個頁面上的東西都變成了黃色,包括:

無法顯示的圖片的alt文字

list元素的邊框

無序list元素前面的小點

有序list元素前面的數(shù)字

還有hr元素

有趣的是,這個hr元素,缺省情況下它并不從body上繼承color的屬性,但我使用border-color: inherit強制讓它繼承。這是個很詭異的特征。

在CSS規(guī)范里是這樣說的:

  

這個屬性聲明了元素文本內(nèi)容的前景色(foreground color)。除此之外,它的值還被用于其它地方間接的引用….比如,其它可以接受顏色值的屬性。

我無法想象出還有什么地方的屬性能用“前景色”來描述,如果你知道,請在評論里告訴我。

2.CSS里的visibility屬性有個collapse屬性值:collapse

對于CSS里的visibility屬性,相信你用過不下幾百次。大多時候,你會把它的值設(shè)置成visible(這是所有頁面元素的缺省值),或者是hidden。后者相當(dāng)于display: none,但仍然占用頁面空間。

其實visibility可以有第三種值,就是collapse。當(dāng)一個元素的visibility屬性被設(shè)置成collapse值后,對于一般的元素,它的表現(xiàn)跟hidden是一樣的。但例外的是,如果這個元素是table相關(guān)的元素,例如table行,table group,table列,table column group,它的表現(xiàn)卻跟display: none一樣,也就是說,它們占用的空間也會釋放。

但遺憾的是,各種瀏覽器對collapse值的處理方式不一樣??匆幌孪旅娴难菔荆?/p>

HTML代碼

Fruits Vegetables Rocks
Apple Celery Granite
Orange Cabbage Flint

CSS代碼

body {
  text-align: center;
  padding-top: 20px;
  font-family: Arial, sans-serif;
}

table {
  border-collapse: separate;
  border-spacing: 5px;
  border: solid 1px black;
  width: 500px;
  margin: 0 auto;
}

th, td {
  text-align: center;
  border: solid 1px black;
  padding: 10px;
}

.vc {
  visibility: collapse;
}

.vh {
  visibility: hidden;
}

button {
  margin-top: 5px;
}

Javascript代碼

var btns = document.getElementsByTagName("button"),
    rows = document.getElementsByTagName("tr");

btns[0].addEventListener("click", function () {
  rows[1].className = "vc";
}, false);

btns[1].addEventListener("click", function () {
  rows[1].className = "vh";
}, false);

btns[2].addEventListener("click", function () {
  rows[1].className = "";
}, false);

演示

http://jsfiddle.net/c0501uL5/4/embedded/result/

CSS-Tricks的Almanac建議說不要使用這個值,因為瀏覽器的不統(tǒng)一。

據(jù)我的觀察:

在谷歌瀏覽器里,使用collapse值和使用hidden值沒有什么區(qū)別。 (See this bug report and comments)

在火狐瀏覽器、Opera和IE11里,使用collapse值的效果就如它的字面意思:table的行會消失,它的下面一行會補充它的位置。

說實話,估計這個值很少人會使用它,但你要知道確實可以使用這樣的一個值,如果以前不知道它,那么,現(xiàn)在,在有些罕見的地方,你也許就會變得聰明一點了。

3.CSS的background簡寫方式里新增了新的屬性值

在CSS2.1里,background屬性的簡寫方式包含五種屬性值 – background-color, background-image, background-repeat, background-attachment, and background-position。從CSS3開始,又增加了3個新的屬性值,加起來一共8個。下面是按順序分別代表的意思:

background: [background-color] [background-image] [background-repeat]
            [background-attachment] [background-position] / [ background-size]
            [background-origin] [background-clip];

注意里面的反斜杠,它更font和border-radius里簡寫方式使用的反斜杠的用法相似。反斜杠可以在支持這種寫法的瀏覽器里在position后面接著寫background-size

除此之外,你開可以增加另外兩個描述它的屬性值: background-originbackground-clip.

它的語法用起來像下面這個樣子:

.example {
  background: aquamarine url(img.png)
              no-repeat
              scroll
              center center / 50%
              content-box content-box;
}

你可以用下面的演示檢測你的瀏覽器是否支持這種寫法:

http://jsfiddle.net/c0501uL5/5/embedded/result/

關(guān)于瀏覽器的支持情況,大概所有的現(xiàn)代瀏覽器都支持這些新屬性值,但對于一些非常老舊的瀏覽器(IE6/7/8),最好在代碼里提供一些萬一不支持的補救機制。

4.CSS的clip屬性只在絕對定位的元素上才會生效

之前說到了background-clip,你可能會想到clip屬性。它的用法是下面這個樣子:

.example {
    clip: rect(110px, 160px, 170px, 60px);
}

它的作用是按指定的尺寸、規(guī)定的大小裁剪元素。很多簡單,但唯一你需要注意的事情是,clip只會在絕對定位的元素上生效。所有,你必須這樣做:

.example {
    position: absolute;
    clip: rect(110px, 160px, 170px, 60px);
}

在下面的演示中,你可以看到當(dāng)元素在絕對定位/相對定位的切換中表現(xiàn)出來的效果:

http://jsfiddle.net/c0501uL5/6/embedded/result/

但是,你也可以將元素的position設(shè)置成position: fixed,因為,根據(jù)css官方規(guī)范,fixed的元素也屬于‘a(chǎn)bsolutely positioned’元素。

5.元素豎向的百分比設(shè)定是相對于容器的寬度,而不是高度

這是一個很讓人困惑的CSS特征,我之前也談到過它。我們大家都知道,當(dāng)按百分比設(shè)定一個元素的寬度時,它是相對于父容器的寬度計算的,但是,對于一些表示豎向距離的屬性,例如padding-top,padding-bottom,margin-top,margin-bottom等,當(dāng)按百分比設(shè)定它們時,依據(jù)的也是父容器的寬度,而不是高度。

下面是一個實例演示,你可以調(diào)整容器的寬度,但你會發(fā)現(xiàn),黃塊塊的padding-bottom的距離也會隨之寬度而變大或變小。

HTML代碼



寬度是: 400px 黃塊塊的Padding bottom是:
10%

CSS代碼

body {
  font-family: Arial, sans-serif;
  padding-top: 30px;
  text-align: center;
}

.wrapper {
  width: 400px;
  margin: 0 auto;
  border: solid 1px black;
}

.box {
  width: 100px;
  height: 100px;
  background: gold;
  margin-left: auto;
  margin-right: auto;
  padding-top: 10%;
  padding-bottom: 10%;
  margin-bottom: 5%;
}

.range {
  display: block;
  margin: 20px auto;
}

output {
  text-align: center;
  display: block;
  font-weight: bold;
  padding-bottom: 20px;
}

output span {
  font-weight: normal;
}

實例演示

http://jsfiddle.net/c0501uL5/7/embedded/result/

上面的代碼中,我們對內(nèi)部子元素聲明了3個豎向的距離,都是百分比形式。當(dāng)移動滑塊時,我們的js代碼只需修改了容器的寬度。但是,這個這三個屬性高度都跟隨著變化,可以看出,它們的百分比計算是基于容器的寬度,而不是高度的。

6.border屬性比你想象的要復(fù)雜

我們很多人都用過這樣的寫法:

.example {
  border: solid 1px black;
}

這里的border屬性的用法實際上是一種簡寫的形式,它分別設(shè)置了border-style, border-width, 和border-color — 用一句代碼表示它們?nèi)齻€。

但不要忘記,border-style, border-width, 和border-color也都有自己的簡寫形式。所以,border-width可以寫成這樣:

.example {
  border-width: 2px 5px 1px 0;
}

這樣,四個邊的寬度被一次設(shè)定。border-colorborder-style 屬性也可以這樣做。下面的這個實例演示就是用的這種寫法:

HTML代碼

CSS代碼

body {
  font-family: Arial, sans-serif;
}

.box {
  width: 150px;
  height: 150px;
  margin: 20px auto;
  border-color: peachpuff chartreuse thistle firebrick;
  border-style: solid dashed dotted double;
  border-width: 10px 3px 1px 8px;
}

p {
  text-align: center;
}

演示

http://jsfiddle.net/c0501uL5/8/embedded/result/

其實,這些每個屬性還可以繼續(xù)細(xì)化,被拆分成border-left-style, border-top-width, border-bottom-color….

但是,你無法用border的簡寫分別對四個邊設(shè)置不同的值,只能分開來設(shè)置。所以,border是一個簡寫里還有簡寫的屬性。

7.text-decoration屬性變成了屬性簡寫

我相信有些小知識會讓你大吃一驚。

跟著最新的CSS規(guī)范,text-decoration現(xiàn)在的寫法是這樣的:

a {
  text-decoration: overline aqua wavy;
}

text-decoration屬性現(xiàn)在需要用三種屬性值來表示了:text-decoration-line, text-decoration-color, and text-decoration-style.

但不幸的是,目前只有火狐瀏覽器實現(xiàn)了對這些新屬性的支持。

你可以用火狐瀏覽器試一試下面的演示:

HTML代碼

IT"S LIKE WATER, PEOPLE

(You should see a wavy line on top. Currently works only in Firefox)

CSS代碼

body {
  padding: 30px;
  text-align: center;
  font-family: Arial, sans-serif;
}

a, a:visited {
  color: blue;
  background: aqua;
  -moz-text-decoration-color: aqua;
  -moz-text-decoration-line: overline;
  -moz-text-decoration-style: wavy;
  text-decoration-color: aqua;
  text-decoration-line: overline;
  text-decoration-style: wavy;
}

演示

http://jsfiddle.net/c0501uL5/9/embedded/result/

在這演示中,我們沒有使用簡寫形式,而是分開描述每個屬性。這是可以更好的保證瀏覽器的向后兼容,使那些目前不支持這種寫法的瀏覽器也不受影響。

8.border-width屬性可以使用預(yù)定義常量值

也許對與你來說這并不是一個什么新鮮信息。除了可以使用標(biāo)準(zhǔn)寬度值(例如5px或1em)外,border-width屬性可以接受預(yù)定義的常量值:medium, thin, 和 thick

事實上,如果你不給border-width屬性賦值,那它的缺省值是“medium”。下面的演示就是用了預(yù)定義常量值:

HTML代碼

CSS代碼

body {
  font-family: Arial, sans-serif;
  text-align: center;
}

.example {
  width: 100px;
  height: 100px;
  margin: 20px auto;
  background: aqua;
  border: solid thick red;
}

演示

http://jsfiddle.net/c0501uL5/10/embedded/result/

在瀏覽器使用這些預(yù)定義常量值時,CSS規(guī)范里并沒有規(guī)定都應(yīng)該是什么寬度,但從我的觀察看,它們的值分別是 1px, 3px, 和 5px.

9.為什么沒有人使用border-image

之前我曾經(jīng)寫過一篇關(guān)于CSS的border-image屬性的文章?,F(xiàn)在幾乎所有的現(xiàn)代瀏覽器都支持這個屬性——除了IE10及以下IE版本。

看起來這是一個非常漂亮的CSS功能,它可以讓你用圖片修飾元素的邊框。下面是一個實例演示,你可以拖拽調(diào)整里面的方塊的大小,看看有什么邊框圖案的變化。

HTML代碼



<上面的方塊使用了圖片描邊。在這個方塊的右下角,有一個可以調(diào)整這個方塊大小的小三角,點住它,拖動它調(diào)整方塊大小,看看有什么效果。.

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.

CSS代碼

body {
  font-family: Arial, sans-serif;
  text-align: center;
}

.bi {
    border: 45px solid transparent;
    -webkit-border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
    -moz-border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
    border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
    font-family: Arial, Helvetica, sans-serif;
    color: #222;
    width: 500px;
    margin: 30px auto 30px auto;
    overflow: hidden;
    resize: both;
}

演示

http://jsfiddle.net/c0501uL5/11/embedded/result/

但不幸的是,這么好的一個功能,卻沒有看到多少人使用它,也許是我的眼界太窄。如果你在哪看到過有人使用border-image屬性,或你在真正項目中使用了它,請留言告訴我。

10.你知道table里的empty-cells屬性嗎?

css里的empty-cells屬性是所有瀏覽器都支持的,甚至包括IE8,它的用法是下面這個樣子:

table {
  empty-cells: hide;
}

估計你從語義上已經(jīng)猜出它的作用了。它是為HTML table服務(wù)的。它會告訴瀏覽器,當(dāng)一個table單元格里沒有東西時,就隱藏它。下面的演示里,你可以點擊里面按鈕,它會切換empty-cells的屬性值,看看table的顯示有什么變化。

HTML代碼



Fruits Vegetables Rocks
Celery Granite
Orange Flint

CSS代碼

body {
  text-align: center;
  padding-top: 20px;
  font-family: Arial, sans-serif;
}

table {
  border: solid 1px black;
  border-collapse: separate;
  border-spacing: 5px;
  width: 500px;
  margin: 0 auto;
  empty-cells: hide;
  background: lightblue;
}

th, td {
  text-align: center;
  border: solid 1px black;
  padding: 10px;
}

button {
  margin-top: 20px;
}

js代碼

var b = document.getElementById("b"),
    t = document.getElementById("table");

b.onclick = function () {
  if (this.getAttribute("data-ec") === "hide") {
    t.style.emptyCells = "show";
    this.setAttribute("data-ec", "show");
  } else {
    t.style.emptyCells = "hide";
    this.setAttribute("data-ec", "hide");
  }
};

演示

http://jsfiddle.net/c0501uL5/12/embedded/result/

在上面的演示中,我為能讓單元格的邊框顯示出來,在單元格的邊框間添加了空隙。有時候這個屬性不會有任何視覺效果,因為你必須讓你里面有可見的東西。

11.font-style的oblique屬性值

對與css的font-style屬性,我估計大家每次見到的都是使用“normal”或 “italic”兩個屬性值。但事實上,你還可以讓它賦值為“oblique”。請看下面的演示:

HTML代碼

Oblique Text

Italic Text

CSS代碼

h1 {
  font-weight: normal;
  font-family: Georgia, serif;
  font-style: oblique;
  text-align: center;
  font-size: 50px;
}

h1:nth-child(2) {
  font-style: italic;
}

p {
  font-family: Arial, sans-serif;
  text-align: center;
}

演示

http://jsfiddle.net/c0501uL5/13/embedded/result/

這是什么意思?為什么“oblique”和斜體”italic”的效果是一樣的?

CSS規(guī)范中是這樣描述“oblique”的:

  

“…讓一種字體標(biāo)識為斜體(oblique),如果沒有這種格式,就使用italic字體?!?/p>

這里描述所用的“oblique”和“italic”都是傾斜的意思?!皁blique”在維基百科里的解釋就是一種排版術(shù)語,就是一種傾斜的文字,但不是斜體。

因為“oblique”對于font-style來說是一種合法的屬性值,它可和italic進(jìn)行互換,除非真有一種字體只提供了oblique體而沒有提供斜體。

但我似乎從來沒有聽說過哪種字形提供過oblique字體,也許我錯了。研究發(fā)現(xiàn),一種字庫好像不能同時提供斜體和oblique兩種字體,因為oblique基本上是一種模仿的斜體,而不是真正的斜體。

所以,如果我沒有猜錯的話,如果一種字庫里沒有提供斜體字,那當(dāng)使用CSS的font-style: italic時,瀏覽器實際上是按font-style: oblique顯示的。

12.word-wrap和overflow-wrap是等效的

word-wrap并不是一個很常用的CSS屬性,但在特定的環(huán)境中確實非常有用的。我們經(jīng)常使用的一個例子是讓頁面中顯示一個長url時換行,而不是撐破頁面,下面是一個例子。

HTML代碼

supercalifragilisticexpialidocious

CSS代碼

body {
  font-family: Arial, sans-serif;
  text-align: center;
}

.p {
  font-size: 24px;
  text-align: center;
  width: 200px;
  margin: 20px auto;
  border: solid 1px black;
  min-height: 60px;
  word-wrap: break-word;
}

button {
  display: block;
  margin: 0 auto;
}

JS代碼

var p = document.getElementById("p"),
    b = document.getElementById("b");

b.onclick = function () {
  if (this.getAttribute("data-ww") === "break-word") {
    p.style.wordWrap = "normal";
    this.setAttribute("data-ww", "normal");
  } else {
    p.style.wordWrap = "break-word";
    this.setAttribute("data-ww", "break-word");
  }
};

演示

http://jsfiddle.net/c0501uL5/14/embedded/result/

因為這個屬性最初是由微軟發(fā)明的,所以,所有的瀏覽器都支持這個屬性。

盡管有所有的瀏覽器都支持,但W3C決定要用overflow-wrap替換word-wrap,我想可能是他們認(rèn)為word-wrap用詞不當(dāng)。overflow-wrapword-wrap具有相同的屬性值,但現(xiàn)在,word-wrap被當(dāng)作overflow-wrap的備選寫法。

雖然已經(jīng)有不少的瀏覽器支持overflow-wrap這種寫法,但看起來沒必要使用overflow-wrap來讓老的瀏覽器不支持。所有的瀏覽器都會繼續(xù)支持word-wrap這種寫法。

這其中有多少是以前不知道的?

不知道你從這篇博客里學(xué)到了多少知識?我希望它對你有些用處。非常有經(jīng)驗的Web程序員可能會知道其中的大部分,但未必全部。而如果你是新手,想必收益頗豐。

轉(zhuǎn)自 WEB 駭客-12個你未必知道的CSS小知識

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

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

相關(guān)文章

  • 2017文章總結(jié)

    摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進(jìn)階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...

    dailybird 評論0 收藏0
  • 2017文章總結(jié)

    摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進(jìn)階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...

    hellowoody 評論0 收藏0
  • 2017文章總結(jié)

    摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進(jìn)階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...

    wwolf 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0

發(fā)表評論

0條評論

Caizhenhao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<