css屬性分類介紹
CSS分類目錄
- 文本/字體/顏色
- 文本相關
- 字體相關
- 顏色相關
- 背景相關
- 大小/布局
- 大小屬性
- margin 外邊距
- padding 內邊距
- border 邊框
- position 定位
- 列表/表格
- 多列屬性
- 可伸縮框屬性
- 列表屬性
- Grid屬性
- Table屬性
- 動畫屬性
- Animation 動畫屬性
- Transition 過渡屬性
CSS屬性分類
文本/字體/顏色/背景
字體類
- font-family:指定字體
- 需要考慮客戶端機器上是否裝有字體
- 可以排列多個字體,用逗號分隔,如果有空格用引號分隔
- 最后一個建議放通用字體名,這個屬性只有幾個選項:serif | sans-serif | cursive | fantasy | monospace
- font-size:字體大小,要注意有絕對大小,相對大小,長度,百分比
- 一般建議采用相對大小,即em或者rem
- 典型的長度單位,詳細信息請參考這里
- font-style:正常體、斜體、傾斜體
- font-weight:設置粗體
- font-variant:用來將所有字體都變成大寫,但是原來是大寫的字體呢又要比默認的要大一些
- font:
- 簡寫形式,如上所有跟字體相關的字體混合在一起
- font-family是必選的,而且一定要在最后;font-size如果有,必須出現在倒數第二個, 后面可以用
/跟一個line-height的設置 - 剩下的font-style, font-weight, font-variant就無所謂了,前面任意排列
- font還支持一些類似caption, icon等快捷描述
- 詳細請參考這里
- line-height:一個數字,默認差不多為1.2,有normal/數字/長度/百分比
- font-size-adjust:不太常用屬性,用來設置英文字體的大小寫字母之間的高度比例的
文本類
- word-spacing:詞和詞之間的距離,默認值是由字體來定的,自定義可以定義為長度/百分比,對於中文來講,也是空格
- letter-spacing:字母和字母之間的距離,默認值是由字體來定的,可以自定義為長度單位
- word-break:文字換行邏輯
- normal:默認值,英文空格處換行,中文任意字符換行;
- break-all:都采用中文的方式任意換行;
- keep-all:都采用英文的方式,中文也要遇到了空格或者回車等特殊符號才換行
- break-word:跟normal類似,不過即使min_width(即單個單詞的長度)大於容器的width的時候,會換行,而不是超出
- word-wrap/overflow-wrap:normal/break-word。word-wrap是overflow-wrap的別名。邏輯跟如上word-break的break-word的邏輯類似,要溢出的時候是否換行, 詳情參考這里
- vertical-align: 上下對齊方式
- 只針對display的值為inline和table-cell的元素有效,比如span,img,input,td等元素,對於其他塊級元素都不生效
- 取值范圍為枚舉/長度/百分比
- 枚舉取值為:baseline(基線默認)/super(上標)/sub(下標)/top(父元素頂部)/bottom(父元素底部)/middle(父元素中部)/text-top(文字頂部)/text-bottom(文字底部)
- text-align: 左右對齊方式
- 也是指針對行內元素有效,不能針對塊級元素進行控制
- 取值為:left, right, center和justify(兩側對齊)
- text-transform:大小寫轉換
- 取值為枚舉:capitalize:首字母大寫;uppercase/lowercase; none;
- text-shadow:陰影設置,可以設置陰影的顏色,相對原字體的位置,以及模糊半徑
- text-decoration:設置顏色、位置、樣式。分別對應了text-decoration-color,text-decoration-line,text-decoration-style
- 位置可以為:上划線、下划線、刪除線、閃爍和無
- 樣式可以為:實線(solid)、雙實線(double)、dotted(點虛線)、dashed(虛線)、wavy(波浪線)
- 注意:父親會影響兒子,且兒子無法取消
- text-indent:縮進,段落第一行文本要空多少距離,單位為長度
- text-justiy:在text-align被設置為justiy的時候用來控制是在單詞之間加空格(英文),還是在字母之間加空格(中文)
- text-overflow:文本溢出的截斷,可以用'...'來代替,或者用自己定義的字符串來代替超出字符
- 需要配合 overflow: hidden 的屬性來控制, 否則還是會超出邊距顯示
- white-space:控制空格符,"\t", "\n"以及顯示的時候是否折行顯示的屬性
- normal/nowrap/pre/pre-wrap/pre-line:詳情參考這里
顏色&背景類
- color:背景顏色,關於眼色的值一共有三種,枚舉值,#xxx, rgb, hsl,詳細請參考這里
- opacity:不透明度,即設置顏色的透明的程度,0為透明,1為不透明,單獨的屬性設置和用color的rgba函數來設置都一樣
- backgroud-color:背景顏色
- backgroud-image:
- 可以指定多個圖片,第一個圖片最接近用戶,border會最后繪制
- backgroud-clip:背景圖片延伸到盒子模型的范圍,到文本、到邊框內沿,到邊框外沿
- backgroud-origin:跟backgroud-clip類似,只是只作用域backgroud-image, 可以取值為border-box, padding-box, content-box
- backgroud-position:背景圖片的位置,可以設置為枚舉值,也可以設置為相對於左上角的坐標,分別為長度單位,這個值一般要跟backgroud-repeat: no-repeat配合使用
- backgroud-size:設置背景圖片的大小,可以控制壓縮或者截斷或者比例
- auto:自動
- cover:圖片做截斷,裝滿背景,但是背景圖片可能顯示不全
- contain:圖片不做截斷,但是有可能裝不滿背景
- 還可以指定長寬來按照指定的比例來縮放背景圖片
- backgroud-repeat:不重復;沿着x,y軸重復(最后一個圖片可能會被截斷);圖片不截斷,但是中間留空隙;圖片不截斷,同時拉伸/壓縮圖片保證圖片之間無空隙;
- backgroud-attachment:背景圖片是否隨着鼠標滾輪而變動位置
- backgroud:如上各個backgroud開頭的屬性的組合,組合比較自由,一共8個元素:
- backgroud-color必須出現在最后;
- 盒子屬性有backgroud-clip, backgroud-origin,可以出現0,1,2次
- backgroud-size必須出現在backgroud-position之后,用/連接
- backgroud-image, backgroud-position, backgroud-size, backgroud-repeat, backgroud-attachment 可以任意出現
文字連接&鼠標樣式
- a:link 文字連接默認格式; a:visited 訪問過后的鏈接樣式;a:active 鼠標點擊時候的樣式;a:hover 鼠標移動上去的樣式;
- 鼠標樣式:help 加?;pointer 變為手;progress:請等待;wait:系統繁忙;move:拖拽;not-allowed:不能執行;等等,詳細請參考這里
大小/布局類
大小屬性
- width/height:包含了width,max-width,min-width幾個配套的屬性,值為長度/百分比;同時還可以設置一些屬性值,用於表達width用於內容級別,還是border級別等;
- max-width/max-height:最大寬度/高度
- min-width/min-height:最小寬度/高度
盒子模型類
- border:包含了粗細、樣式、顏色。
- border-width:可以有1~4個長度值。1個代表4個邊;2個的話代表橫邊和縱邊;3個代表上,左&右,下;4個代表上,右,下,左
- border-style:可以有1~4個枚舉值。跟text-decoration類似,可以有實線、雙實線、虛線、點虛線、波浪線等,還可以有浮雕、陷入、突出等效果;
- border-color:可以有1~4個顏色值。
- border-image:可以用來設置邊框的圖片,用來顯示一些比較漂亮的邊框,圖片選擇哪些部分來作為邊框請參考這里
- border-radius:用來設置圓角的
- box-shadow:邊框的模糊划效果,跟text-shadow是類似的效果,可以設置陰影相對位置/陰影模糊半徑/擴散半徑/陰影顏色;
- outline:outline跟border類似, 是畫邊框的,
- 跟border的區別是 1. 不占盒子模型寬度; 2. 可能不是矩形;
- 准確來說, outline應該不算是盒子模型的屬性
- 跟border類似有, outline-style, outline-color, outline-width三個子屬性
- margin/padding:外邊距,內邊距的屬性,可以有1~4個值,不同個數的值代表函數同邊;
- margin-top/margin-bottom/margin-left/margin-right:對應的控制4個邊的外邊距的屬性
- padding-top/padding-bottom/padding-left/padding-right:對應的控制4個邊的內邊距的屬性
布局類
基礎定位類
- float:浮動屬性
- clear:清除浮動
- position:位置類型
- top/left/bottom/right:如果設置了position為非static的話,就可以設置這幾個值來調整div的相對位置
- display:顯示類型
- visibility:是否顯示,設置為hidden則不顯示,跟display:none最大的區別就在其還是會占據空間;還有個跟表格相關的collapse的選項;
- overflow:visible(默認值), 會顯示出來;hidden, 不顯示了;scroll,增加滾動條;auto,交給瀏覽器來判斷是否裝得下,裝不下就加滾動條;
- clip:用來剪切一個形狀的屬性,可以剪切為圓形,不規則多邊形,圓弧等形狀
- transform:對元素屬性主要是用來對某個元素進行旋轉,偏移等,demo效果請參考這里。
- z-index:
- 不同z-index之間的比較只針對父親和直屬子元素,一個比較好的理解是給理解成目錄版本號,詳細請參考這里
- 除了z-index之外,還有其他的一些屬性也會生成一個新的
層疊上下文- z-index不為auto:非static的元素,或者flex元素
- opacity小於1, 即元素半透明
- transform不為nong的元素,即有各種角度變換的操作等
多列屬性
- columns:像論文一樣將文章按照多列的方式來展示,可以分成任意多列;
- column-count:分成幾列來顯示文本
- column-gap:每一列之間的間距大小
- column-rule:每一列之間的間隔樣式(類似border)
- column-span:可以將某段文字橫跨所有列, 比如標題,或者將文章分成幾個格子來展現
- column-width:每一個列的寬度;
Flex布局
父親元素設置
基本屬性設置
彈性布局,更多詳細請參考這里
該布局主要用於單行的橫向排版布局, 相比於float等布局方式主要好處在於其不脫離文檔流, 控制比例方便
- display:flex:將父親設置為 flex 彈性布局
- flex-direction:row(從左往右), row-reverse(從右往左), column(從上往下), column-reverse(從下往上)
- 主軸:以從左往右為例, 就是左->右;
- 交叉軸:就是垂直於主軸的方向,以rtl為例, 就是上->下;
- 起始和終止:以左->右布局為例, 起始就是左邊交叉軸->右邊交叉軸;
- 主軸和交叉軸概念很重要,因為各種屬性都是控制區塊是如何在主軸和交叉軸上面分布的;
- flex-wrap:沿着主軸的元素如果超出父元素寬度之后,是否自動折行顯示新子元素,默認不折行,直接超出父元素顯示;
- wrap:換行;nowrap:不換行;
- flex-flow:將flex-direction和flex-wrap合起來的簡寫屬性;
元素對齊與空間分配
- align-items:元素在交叉軸上的高度控制
- flex-start:頂部對齊,不自動拉伸高度
- felx-end:底部對齊,不自動拉伸高度
- center:中間對齊
- stretch:默認值,自動拉伸占滿所有高度
- justify-content:在主軸上的布局方式
- flex-start:靠左對齊
- flex-end:靠右對齊
- center:居中
- space-round:平均分布,左右也留白
- space-between:平均分布,左右對齊邊界
- align-content:對於多行的flex容器設置行與行之間的排布
子元素寬度屬性
占據寬度設置
- flex-bias:用來決定子元素的初始長度
- 默認為auto,意思是讓瀏覽器來決定寬度,如果設置了width,就用;否則就瀏覽器自己計算;
- 也可以人工指定絕對值或者百分比(相對父親),用來手動指定寬度
- flex-grow:一個絕對的數字,如果子元素之和沒有父元素寬的話,就用這個數字的相對比例來決定每個元素如何分配剩下的空間
- flex-shrink:跟flex-grow類似,只不過是子元素之和大於父元素的時候,怎么壓縮,不過壓縮不會無限制壓縮,每個元素都會有個最小寬度。
- 具體grow和shrink在實際應用當中的表現可以參考這里
- flex:如上三個屬性的簡寫,可以為枚舉值或者1~3個數字
- auto:相當於1 1 auto,即自動伸長,也自動伸縮,寬度由瀏覽器決定
- initial: 默認值, 相當於0 1 auto, 即不自動伸長,但是自動收縮,寬度由瀏覽器決定
- none:相當於0 0 auto,即不自動伸長,也不自動收縮,寬度由瀏覽器決定
- 如果是一個值:
- 如果是一個無單位的數,會被當成flex-grow的值
- 如果是一個長度/寬度單位,會被當成flex-bias的值
- 如果是兩個值:
- 第一個值必須是一個無單位的數,當成是flex-grow的值
- 第二個值可以是:
- 一個無單位的數,當成是flex-shrink的值
- 一個長度/寬度單位,會被當成是flex-bias的值
- 如果是三個值
- 第一個值必須是無單位的數,會被當成flex-grow的值
- 第二個值必須是無單位的數,會被當成是flex-shrink的值
- 第三個值必須是長度/寬度單位或者枚舉值,被當成flex-bias的值
- 占據高度設置
- align-self:在子元素上面設置元素在交叉軸上面的高度控制
- 默認為父親的align-items的值
- 如果設置了,就覆蓋父親的值,值得取值范圍和含義跟align-items一模一樣
- 排序設置
- order:如果子元素設置了該屬性,則各子元素按照order值排序,否則按照文檔出現的先后順序排序
網格布局
網格布局跟Flex彈性布局是類似的,都是css3新出的屬性。
Flex主要針對的是單行的布局,一般不會換行。Grid主要針對的是表格類多行布局,可以將其想象成在css中控制類似excel的表格。
相比於普通的html中的table布局,Grid布局一方面主要是在 css 中控制表格效果,另一方面是在合並單元格方面比表格布局會更靈活。
更多跟Grid布局相關的信息,請參考這里
父親屬性
- display: grid:將父親設置為表格布局屬性,所有其直屬兒子都會按照表格方式布局
- grid-template-columns:將表格分為多少列
- 可以直接寫100px, 100px, 100px 將表格分為三個 100px 的列
- 也可以寫 1fr, 1fr, 1fr 將表格均分為三個相同的列,主要 fr 是專門為grid布局新出的一個單位
- 也可以寫 repeat(3, 1fr) 達到跟上面一樣的效果,這樣可以減少書寫的量
- 還可以為每條線命名,這樣兒子就可以不用坐標,而用名字來定位,有的時候這樣代碼會更可讀一些,比如
- grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end];
- grid-template-rows:將表格分為多少行,同上
- grid-auto-rows:設置每一行的高度,可以用minmax(100px, auto)來設置為最少100px, 最高就讓瀏覽器自己設置
- grid-auto-columns:同grid-auto-rows
- grid-column-gap:列與列之間的寬度,一個長度單位
- grid-row-gap:行與行之間的寬度,一個長度單位
- grid-gap:如上兩個屬性的簡寫
- 如果只有一個值,會同時應用到行與列的間距
- 如果有兩個值,第一個用到行,第二個用到列
- grid-template-areas:這個是基於命名網格的定位, 在該屬性中將所有單元格屬於哪個兒子都寫出來,詳情請參考這里
兒子屬性
兒子定位默認是從左到右,從上到下,按照單元格依次排布的。
而Grid屬性最大的作用就是可以彈性布局,即合並單元格,每個兒子可以指定自己所占據的單元格的區間。
設置的方式有多種:
- grid-column-start/grid-column-end/grid-row-start/grid-row-end:這四個屬性就對應了橫縱坐標軸(注意,是從1開始)
- 默認每個兒子只占一個單元格,所以如果只寫了start,不寫end的話,默認end就是start+1;同樣,如果只寫了end的話,start就是end-1
- 坐標可以設置為負數,即導數第幾個坐標
- grid-column/grid-row的簡寫,如下:
- grid-column: 1 / 2
- grid-row: 1 / 4
- 可以用span關鍵字來改為start/start+_span_的方式來設置單元格屬性,這樣可以專注單元格大小,示例如下:
- grid-column: 1 / span 1
- grid-row: 1/ span 3
- 效果跟上面兩行效果是一樣的
- grid-area屬性,如下:
- grid-area:1 / 1 / 4 / 1
- 該屬性是按照 上/左/下/右 的順序來寫的,跟margin正好是反方向的
表格布局
表格布局是很老很早的布局了,其布局結構主要在html中控制,css中有如下的幾個屬性來控制表格的行為:
而現在表格一般不用來布局了,主要還是用來做表格類數據的呈現。
-
border-collapse:控制單元格之間的邊框是否合並,默認不合並,但是一般都要設置為合並;
- 默認為seperate,合並為collapse
-
border-spacing:跟grid-gap類似,設置的單元格之間的間距,如果是一個值就是統一設置,如果是兩個值就是先行后列
- 如果設置了border-collapse屬性,就會忽略border-spacing的屬性
-
empty-cells:在沒有內容的單元格周圍是否繪制邊框
- show:繪制,默認值
- hide:不繪制
- 如果設置了border-collapse為collapse的話,就會忽略該屬性
-
caption-side:可以在html中用
caption添加一個標題,然后這個屬性是用來控制該標題的位置,是位於表格的上面還是下面 -
top:頂部
-
bottom:底部
-
table-layout:用來設置單元格的布局寬度高度的算法
- auto:自動設置,默認值
- 某列寬度由沒有折行的最大寬度來決定,即使設置了width也沒用
- 該算法較慢,因為要遍歷完所有內容才能決定每一列的寬度,在主要以呈現數據為主的頁面中不建議使用
- fixed:固定寬度
- 跟單元格內內容無關,就跟表格自身設置的高度寬度比例有關
- auto:自動設置,默認值
動畫屬性
animation
animation 屬性的動畫原理是在一段時間之內修改某個元素的屬性,然后瀏覽器會自動的將修改屬性在這段時間之內均勻化,看起來就是一個比較均勻的動畫效果了。
最簡單的動畫就是設置調整位置屬性,然后就可以均勻的上
下或者左右移動了。
- @keyframes
動畫的關鍵幀配置,類似一個函數,將動畫的關鍵時間點對應的屬性信息給標注上,配置示例如下:
@keyframes mymove
{
0% {top:0px;}
25% {top:200px;}
50% {top:100px;}
75% {top:200px;}
100% {top:0px;}
}
最終的動畫效果參考這里。
- animation-name:即指定的
keyframes的名字,如上的例子就是 mymove - animation-duration:動畫的持續時間,我估計瀏覽器會根據這個時間來計算需要自動計算的幀數,因為人眼睛需要每秒24幀的變化才能顯示出比較平滑的動畫效果;
- animation-timing-function:動畫的變化的速度曲線,可以是線性的,或者一開始慢后面快,或者反過來,或者先慢后快結束的時候再慢等選項,也可以通過指定三次貝塞爾函數
cubic-bezier(n,n,n,n)來選擇不同的動畫效果; - animation-delay:在動畫開始之前的延遲;
- animation-iteration-count:默認為1,可以為任意整數,也可以設置為枚舉值
infinite從而無線循環; - animation-direction:枚舉值,默認為normal,即正常播放動畫,可以設置為
alternate該值得含義是奇數次正向播放,偶數次反向播放;當然,如果animation-iteration-count設置為1的話,該屬性就沒有意義了; - animation-play-state:paused和running的枚舉值,可以對動畫進行暫停和繼續的操作,類似視頻播放的感覺;
- animation-fill-mode:在動畫開始之前和之后屬性的應用值;
- animation:綜合如上所有屬性的一個簡寫屬性
- 各簡寫屬性出現的順序並沒有明確規定,而且沒有任何一個屬性是必須的;
- 只有時間的值可能會出現0,1,2次,當出現1次的時候表示的是
animation-duration的值,如果出現2次代表的是animation-delay的值 - 可以有多組值,用逗號做分割,表示多個動畫效果同時顯示和起作用
transition
- transition-property:對該元素哪個屬性的變化進行動畫效果
- 當然,不是所有的屬性都支持動畫的,常見的位置、大小、顏色、以及旋轉 之類的都是支持的,詳細支持列表請參考這里
- 只要屬性發生變化,都會實現動畫效果,比如hover屬性或者js變化屬性
- transition-duration:動畫的持續時間
- transition-delay:動畫開始的延遲時間
- transition-timing-function:動畫的速度函數,可以是勻速,也可以是變速,也可以是指定函數
- transition:是如上幾個屬性定的簡寫屬性
- 幾個屬性出現的順序沒有明確規定,如果是時間字段的話,第一個是duration,第二個是delay-time
- 一些常見的動畫效果示例請參考這里。
其他
- 長度:長度是css的基本單位,會有如下的一些可能的值:
- 會用到長度單位的典型的屬性:
- font-size, width, margin, padding, border-width, text-shadow
- 相對單位
- cap:相對當前字體的大寫字母的高度
- ch:相對字體當中
0的高度 - ex:相對字體當中小寫
x字母的高度,一般字體的ex≈0.5em - lh/rlh:相對當前行高/跟節點行高
- em/rem:相對當前字體/根節點字體
- 絕對單位
- px:一個像素點,跟設備相關,一般1cm約等於35~45個像素點
- Q/mm/cm:0.25毫米/毫米/厘米
- pt/in:1/72英寸 / 英寸
- pc:12px
- 視窗單位
- vh/vw:相對視窗的高度/寬度的1/100
- vmin/vmax:在視窗的min(高度, 寬度)和max(高度, 寬度)的1/100
- 會用到長度單位的典型的屬性:
在實際應用場景中,主要使用的是em和px兩個類型的長度。
- 顏色:
- 枚舉值
- 比如red, blue, yellow一共大概有將近150個預定義的顏色,詳細請參考這里
- RGB立體坐標
-
RGB || #RRGGBB
- 當設置為#RGB的時候,跟#RRGGBB是一樣的,比如#F03,效果跟#FF0033是一樣的
- 可以用rgb(r_int, g_int, b_int)來表示,跟上面表示是類似的,只不過一個用的是16進制,一個用的是十進制
- 可以用rgba(r_int, g_int, b_int, 透明度),透明度得分從0~1的浮點數,0是透明,1是不透明
-
- HSL圓柱坐標
- hsl(色相, 飽和度, 明度)
- 色相是一個彩虹圓環的角度值,red為0/360,green為120,blue為240;
- 飽和度是顏色的顯示強度,如果為0就是黑白照片即某種灰色
- 明度是明亮度,如果是100%,就是白色了,如果是0%,那就是黑色了
- hsla,跟rgba一樣可以增加一個透明度的參數
- hsl(色相, 飽和度, 明度)
- 枚舉值
- 漸變函數
- 漸變函數是一種自定義的image表示方法,使用示例參考這里
- 直線漸變:linear-gradient(角度,方向,顏色列表),在顏色后面還可以跟一個比例表示位置從什么地方開始漸變
- 圓形漸變:radial-gradient(顏色列表)
- 重復漸變:重復漸變(即條紋裝漸變)
