国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Caizhenhao / 1070人閱讀

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

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

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

對于CSS的color屬性,相信所有Web開發人員都使用過。如果你并不是一個特別有經驗的程序員,我相信你未必知道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元素上,設置成了yellow。但是,你也看到了,所有這個頁面上的東西都變成了黃色,包括:

無法顯示的圖片的alt文字

list元素的邊框

無序list元素前面的小點

有序list元素前面的數字

還有hr元素

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

在CSS規范里是這樣說的:

  

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

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

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

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

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

但遺憾的是,各種瀏覽器對collapse值的處理方式不一樣。看一下下面的演示:

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建議說不要使用這個值,因為瀏覽器的不統一。

據我的觀察:

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

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

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

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/

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

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

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

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

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

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

在下面的演示中,你可以看到當元素在絕對定位/相對定位的切換中表現出來的效果:

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

但是,你也可以將元素的position設置成position: fixed,因為,根據css官方規范,fixed的元素也屬于‘absolutely positioned’元素。

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

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

下面是一個實例演示,你可以調整容器的寬度,但你會發現,黃塊塊的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/

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

6.border屬性比你想象的要復雜

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

.example {
  border: solid 1px black;
}

這里的border屬性的用法實際上是一種簡寫的形式,它分別設置了border-style, border-width, 和border-color — 用一句代碼表示它們三個。

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

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

這樣,四個邊的寬度被一次設定。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/

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

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

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

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

跟著最新的CSS規范,text-decoration現在的寫法是這樣的:

a {
  text-decoration: overline aqua wavy;
}

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

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

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

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屬性可以使用預定義常量值

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

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

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/

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

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

之前我曾經寫過一篇關于CSS的border-image屬性的文章。現在幾乎所有的現代瀏覽器都支持這個屬性——除了IE10及以下IE版本。

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

HTML代碼



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

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;
}

估計你從語義上已經猜出它的作用了。它是為HTML table服務的。它會告訴瀏覽器,當一個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規范中是這樣描述“oblique”的:

  

“…讓一種字體標識為斜體(oblique),如果沒有這種格式,就使用italic字體。”

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

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

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

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

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

word-wrap并不是一個很常用的CSS屬性,但在特定的環境中確實非常有用的。我們經常使用的一個例子是讓頁面中顯示一個長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/

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

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

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

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

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

轉自 WEB 駭客-12個你未必知道的CSS小知識

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/111005.html

相關文章

  • 2017文章總結

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

    dailybird 評論0 收藏0
  • 2017文章總結

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

    hellowoody 評論0 收藏0
  • 2017文章總結

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

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

    摘要:系列種優化頁面加載速度的方法隨筆分類中個最重要的技術點常用整理網頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數組函數數據訪問性能優化方案實現的大排序算法一怪對象常用方法函數收集數組的操作面向對象和原型繼承中關鍵詞的優雅解釋淺談系列 H5系列 10種優化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術點 常用meta整理 網頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0

發表評論

0條評論

Caizhenhao

|高級講師

TA的文章

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