成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CSS中簡寫屬性要注意TRouBLe的順序,避免踩坑

開發 前端
簡寫屬性會盡量包容指定的屬性值的順序,但是有很多屬性的值很模糊。在這種情況下,值的順序很關鍵。理解這些簡寫屬性的順序很重要。

簡寫屬性是用于同時給多個屬性賦值的屬性。比如font是一個簡寫屬性,可以用于設置多種字體屬性。它指定了font-style、font-weight、font-size、font-height以及font-family。

  1. font: italic bold 18px/1.2 "Helvetica", "Arial", sans-serif; 

還有如下屬性:

  • background是多個背景屬性的簡寫屬性:background-color、background-image、background-size、background-repeat、background-position、background-origin、background-chip以及background-attachment。
  • border是border-width、border-style以及border-color的簡寫屬性,而這幾個屬性也都是簡寫屬性。
  • border-width是上、右、下、左四個邊框寬度的簡寫屬性。

簡寫屬性可以讓代碼簡潔明了,但是也隱藏了一些怪異行為。

[[336842]]

簡寫屬性會默默覆蓋其他樣式

大多數簡寫屬性可以省略一些值,只指定我們關注的值。但是要知道,這樣做仍然會設置省略的值,即它們會被隱式地設置為初始值。這會默默覆蓋在其他地方定義的樣式。比如,如果給網頁標題使用簡寫屬性 font 時,省略 font-weight,那么字體粗細就會被設置為normal。

 

CSS中簡寫屬性要注意TRouBLe的順序,避免踩坑

 

簡寫屬性會設置省略值為其初始值

添加如下CSS:

  1. h1{ 
  2.   font-weight: bold; 
  3. .title{ 
  4.   font: 32px Helvetica, Arial, sans-serif; 

乍一看可能會覺得<h1 class="title">CSS屬性簡寫</h1>會將標題加粗,但結果不是。以上代碼等價于下面的代碼:

  1. h1 { 
  2.   font-weight: bold; 
  3.  
  4. .title { 
  5.   font-style: normal;      (以下5行)這些屬性的初始值 
  6.   font-variant: normal; 
  7.   font-weight: normal; 
  8.   font-stretch: normal; 
  9.   line-height: normal; 
  10.   font-size: 32px; 
  11.   font-family: Helvetica, Arial, sans-serif; 

給<h1>添加這些樣式會顯示成普通的字體,而不是加粗的字體。這些樣式也會覆蓋從祖先元素繼承的字體樣式。在所有的簡寫屬性里,font的問題最嚴重,因為它設置的屬性值太多了。因此,要避免在<body>元素的通用樣式以外使用font。當然,其他簡寫屬性也可能會遇到一樣的問題,因此要當心。

理解簡寫值的順序

簡寫屬性會盡量包容指定的屬性值的順序。可以設置border: 1px solid black或者border: black 1px solid,兩者都會生效。這是因為瀏覽器知道寬度、顏色、邊框樣式分別對應什么類型的值。

但是有很多屬性的值很模糊。在這種情況下,值的順序很關鍵。理解這些簡寫屬性的順序很重要。

1. 上、右、下、左 

當遇到像margin、padding這樣的屬性,還有為元素的四條邊分別指定值的邊框屬性時,開發者容易弄錯這些簡寫屬性的順序。這些屬性的值是按順時針方向,從上邊開始的。

記住順序能少犯錯誤。它的記憶口訣是TRouBLe:top(上)、right(右)、bottom(下)、left(左)。

用這個口訣給元素設置四邊的內邊距。如下圖所示的鏈接,上內邊距為10px,右內邊距為15px,下內邊距為0,左內邊距為5px。雖然這些內邊距看起來不是很均勻,但是可以說明簡寫屬性的順序。

  1. .nav a { 
  2.   color: white; 
  3.   background-color: #13a4a4; 
  4.   padding: 10px 15px 0 5px;         /* 上、右、下、左內邊距 */ 
  5.   border-radius: 2px; 
  6.   text-decoration: none; 

這種模式下的屬性值還可以縮寫。如果聲明結束時四個屬性值還剩一個沒指定,沒有指定的一邊會取其對邊的值。指定三個值時,左邊和右邊都會使用第二個值。指定兩個值時,上邊和下邊會使用第一個值。如果只指定一個值,那么四個方向都會使用這個值。因此下面的聲明都是等價的。

  1. padding: 1em 2em; 
  2. padding: 1em 2em 1em; 
  3. padding: 1em 2em 1em 2em; 

下面的聲明也是等價的。

  1. padding: 1em; 
  2. padding: 1em 1em; 
  3. padding: 1em 1em 1em; 
  4. padding: 1em 1em 1em 1em; 

對很多開發人員而言,比較難的是指定三個值時。記住,這種情況指定了上、右、下的值。因為沒有指定左邊的值,所以它會取與右邊相等的值。第二個值就會作用到左邊和右邊。因此 padding: 10px 15px 0 是設置左右內邊距為15px,上內邊距為10px,下內邊距為0。

不過,大多數情況只需要指定兩個值。尤其對于較小的元素,左右的內邊距最好大于上下內邊距。這種樣式很適合網頁的按鈕或者導航鏈接,如下圖所示。

  1. .nav a { 
  2.   color: white; 
  3.   background-color: #13a4a4; 
  4.   padding: 5px 15px;            /* 上下內邊距,然后是左右內邊距 */ 
  5.   border-radius: 2px; 
  6.   text-decoration: none; 

它使用簡寫屬性先給垂直方向加上內邊距,再給水平方向加上內邊距。

因為很多屬性遵循這個,所以最好記住它。

2. 水平、垂直

“TRouBLe”口訣只適用于分別給盒子設置四個方向的值的屬性。還有一些屬性只支持最多指定兩個值,這些屬性包括 background-position、box-shadow、text-shadow(雖然嚴格來講它們并不是簡寫屬性)。這些屬性值的順序跟padding這種四值屬性的順序剛好相反。比如,padding: 1em 2em 先指定了垂直方向的上/下屬性值,然后才是水平方向的右/左屬性值,而 background-position: 25% 75% 則先指定水平方向的右/左屬性值,然后才是垂直方向的上/下屬性值。

雖然看起來順序相反的定義違背了直覺,原因卻很簡單:這兩個值代表了一個笛卡兒網格。笛卡兒網格的測量值一般是按照x,y(水平,垂直)的順序來的。比如,如圖1-15所示,要給元素加上一個陰影,就要先指定x(水平)值。

  1. .nav .featured{ 
  2.   background-color: orange; 
  3.   box-shadow: 10px 2px #6f9090; /* 陰影向右偏移10px,向下偏移2px */ 
  1. <div class="nav"> 
  2.   <a href="#">Home</a> 
  3.   <a href="#">Coffees</a> 
  4.   <a href="#">Brewers</a> 
  5.   <a href="#" class="featured">Specials</a> 
  6. </div> 

第一個(較大的)值指定了水平方向的偏移量,第二個(較小的)值指定了垂直方向的偏移量。

如果屬性需要指定從一個點出發的兩個方向的值,就想想“笛卡兒網格”。如果屬性需要指定一個元素四個方向的值,就想想“時鐘”。

 

責任編輯:趙寧寧 來源: 前端全棧開發者
相關推薦

2010-08-25 16:03:26

CSSborder

2024-03-21 15:01:44

2021-06-09 08:21:14

Webpack環境變量前端

2019-06-23 16:02:12

Kubernetes集群節點高并發

2020-03-19 15:02:53

Go語言學習

2010-08-24 16:35:19

paddingCSS

2018-07-12 14:16:35

PHP7代碼SQL

2022-04-19 11:48:54

開發npm踩坑

2011-05-12 18:04:25

CSS

2016-12-26 18:51:34

AndroidJavascriptJSONObject

2023-11-18 18:36:17

defer語句延遲

2010-08-24 16:17:27

CSS簡寫

2016-11-24 15:54:06

androidJSONObject

2021-07-05 07:55:11

PC端移動端設計

2018-02-05 10:18:42

技術管理注意

2023-02-20 08:11:04

2021-04-27 10:14:33

Go業務函數

2009-06-30 10:10:15

Namespace用法Flex

2010-08-25 14:01:29

CSSborder-righ

2018-09-11 09:14:52

面試公司缺點
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜激情免费 | 久久手机在线视频 | 日韩精品在线免费观看视频 | a a毛片| 亚洲成人99 | 欧美一区在线视频 | 成年视频在线观看福利资源 | 国产成人精品免费视频大全最热 | 国产精品一区二区无线 | 欧美日韩精品一区 | 久久久婷婷 | 久久国产精品视频 | 羞羞视频在线观免费观看 | 精品av| 羞羞视频网页 | 九九天堂网| 久久久国产一区 | 国产精品国产a级 | 色婷婷综合久久久中字幕精品久久 | 欧美日韩国产在线观看 | 久久高清国产 | 国产日韩精品一区二区三区 | 四虎影院在线免费观看 | 久久久成人精品 | 男女av| 玩丰满女领导对白露脸hd | 91精品无人区卡一卡二卡三 | 日韩精品一区在线观看 | 亚洲欧美日韩一区二区 | 国产91在线 | 中日 | 91久久精品一区二区二区 | 成人精品久久日伦片大全免费 | 久热免费在线 | 日韩1区 | 日韩精品一区二区三区在线观看 | 成人综合一区 | 欧美精品二区 | 成人一级毛片 | 欧美老少妇一级特黄一片 | 婷婷久久一区 | 欧美一区二区三区 |