CSS3的現狀
- 1、浏覽器支援程度差,需要添加私有字首
- 2、移動端支援優于PC端
- 3、不斷改進中
- 4、應用相對廣泛
如何對待
- 1、堅持漸進增強原則
- 2、考慮使用者群體
- 3、遵照産品的方案
- 4、聽Boss的
css3新增利用屬性選擇标簽
- E[attr] 存在attr屬性即可
- E[attr=val] 屬性值完全等于val的标簽
- E[attr*=val] 屬性值包括val,并且在
位置任意
- E[attr^=val] 屬性值以val開頭的值,并且在
的位置開始
- E[attr$=val] 屬性值以val結束,并且在
的位置結束
//div的calss屬性裡面包含"test"屬性的标簽。
div[class*="test"]
{
background:#ffff00;
}
僞類
除了以前學過的:link、:active、:visited、:hover,CSS3又新增了其它的僞類選擇器。
1.結構(位置)僞類
以某元素(E)相對于其父元素或兄弟元素的位置來擷取無素;
- E:first-child 其父元素的第1個子元素
- E:last-child 其父元素的最後1個子元素
- E:nth-child(n) 其父元素的第n個子元素
- E:nth-last-child(n) 其父元素的第n個子元素(倒着數)
- E:only-child選擇的元素是它的父元素的唯一一個了元素;
注意:指E元素的父元素,并對應位置的子元素必須是E
一旦父元素的子元素不完全是E時,需要。。。
- E:nth-of-type()選擇指定的元素;
- E:nth-last-of-type()選擇指定的元素,從元素的最後一個開始計算;
- E:first-of-type選擇一個上級元素下的第一個同類子元素;
- E:last-of-type選擇一個上級元素的最後一個同類子元素;
- E:only-of-type選擇一個元素是它的上級元素的唯一一個相同類型的子元素;
- E:empty選擇的元素裡面沒有任何内容。(使用并不是很廣泛)
2.目标僞類
- E:target 結合錨點進行使用,處于目前錨點的元素會被選中;
目标僞類選擇器是一個動态選擇器,隻有存在url指向該比對元素時候,樣式才會生效。
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#big-bam-boom:target {
color: red;
}
</style>
</head>
<body>
<h1 id="big-bam-boom">Kaplow!</h1>
<a href="#big-bam-boom">Mission Control, we're a little parched up here.</a>
</body>
</html>
上述代碼的效果是當點選a連結,連結跳轉到h1的時候,h1的文字會顯示為紅色
3.排除僞類
- E:not(selector) 除selector(任意選擇器)外的元素會被選中;
div:not(".box"){
}
僞元素
1.E::first-letter文本的第一個單詞或字(如中文、日文、韓文等)
p:first-line
{
color:#ff0000;
font-variant:small-caps;
}//p标簽的第一個單詞或者字,為這個樣式
2.E::first-line
p:first-line{
color:red
}//p标簽的第一行為這個樣式
3.E::selection
使被選中的文本成為紅色:
::selection
{
color:#ff0000;
}
::-moz-selection
{
color:#ff0000;
}
::selection 選擇器比對被使用者選取的選取是部分。
隻能向 ::selection 選擇器應用少量 CSS 屬性:color、background、cursor 以及 outline。
4、E:before和E:after
在E元素内部的開始位置和結束位建立一個元素,該元素為行内元素,且必須要結合content屬性使用。
E:after、E:before 在舊版本裡是僞元素,CSS3的規範裡“:”用來表示僞類,“::”用來表示僞元素,但是在高版本浏覽器下E:after、E:before會被自動識别為E::after、E::before,這樣做的目的是用來做相容處理。
p:after
{
content:"台詞:-";
background-color:yellow;
color:red;
font-weight:bold;
}//建議用:after,:before,相容低版本
顔色
- rgba(),a為透明度
opacity隻能針對整個盒子設定透明度,子盒子及内容會繼承父盒子的透明度;
transparent 不可調節透明度,始終完全透明
文本
- text-shadow 文字陰影
div{
text-shadow:px px px #ccc;
//第一個表示x軸芙蓉偏移,正右負左
//第二個字表示y軸的偏移,正下負上
//第三個字為模糊度,隻能為正值
//第四個值為顔色,可以為十六進制,也可以為rgba
}
盒模型
- box-sizing: border-box 盒子的大小為width(設定的大小:包括border+padding+content)
- border-sizing:content-box盒子的大小為width+padding+border.
邊框
- border-radius圓角
border-radius:px //5個角都為5px的圓角
border-radius:px px //左上和右下為5px,右上和左下為6px;
border-radius:px px px px //依次為左上,右上,右下,坐下
邊框陰影
box-shadow和text-shadow一樣,多了一個内置陰影(inset)
邊框圖檔
border-image(平時不怎麼用);
背景圖檔
背景在CSS3中也得到很大程度的增強,比如背景圖檔尺寸、背景裁切區域、背景定位參照點、多重背景等。
1.background-size
通過background-size設定背景圖檔的尺寸,就像我們設定img的尺寸一樣,在移動Web開發中做螢幕适配應用非常廣泛。
- background-size:100%,100%(寬高均100%);
- background-size:cover(設定為cover時,會自動調整縮放比例,保證圖檔始終填充滿背景區域,如有溢出部分則會被隐藏,顯示不全。)
- background-size:contain(設定為contain會自動調整縮放比例,保證圖檔始終完整顯示在背景區域)
- 還可以設定成具體的px.
2、background-origin
通過background-origin可以設定背景圖檔定位(background-position)的參照原點。
- border-box以邊框做為參考原點;
- padding-box以内邊距做為參考原點;
-
content-box以内容區做為參考點;
3、background-clip
通過background-clip,可以設定對背景區域進行裁切,即改變背景區域的大小。
- border-box裁切邊框以内為背景區域;
- padding-box裁切内邊距以内為背景區域;
- content-box裁切内容區做為背景區域;
多背景
p{background:url(demo.gif) no-repeat; //這是寫給不識别下面這句的預設背景圖檔
background:url(demo.gif) no-repeat ,url(demo1.gif) no-repeat left bottom, url(demo2.gif) no-repeat px px; //這是進階浏覽器的css多重背景,第一個最上面
background-color:yellow; //這是定義的預設背景顔色,全部适合
}
漸變
1.線性漸變
linear-gradient線性漸變指沿着某條直線朝一個方向産生漸變效果,
a、方向
b、起始色
c、終止色
d、漸變距離
方向:
設定漸變方向,可以用關鍵字如to top、to right,也可以用角度(正負值均可)如45deg、-90deg等,當以角度做為參數時,可0deg從下往上,90deg從左向右,進而可以推算出180deg從上向下。
參考網址
.test {
background: linear-gradient(#fff, #);
}
.test2 {
background: linear-gradient(#, #f00 %, #);
}
.test3 {
background: linear-gradient(deg, # %, #f00 %, # %);
}
.test4 {
background: linear-gradient(deg, #, #f00 %, #);
}
.test5 {
background: linear-gradient(to top right, #, #f00 %, #);
}
2.徑向漸變
radial-gradient徑向漸變指從一個中心點開始沿着四周産生漸變效果
必要的元素:
a) 輻射範圍即圓半徑
b) 中心點 即圓的中心
c) 漸變起始色
d) 漸變終止色
e) 漸變範圍
參考網址
radial-gradient(px, #f00, #ff0, #080); /* 1 */
radial-gradient(px px, #f00, #ff0, #080); /* 2 */
radial-gradient(px px, #f00, #ff0, #080); /* 3 */
代碼:隻給出px,是以被當成是正圓的半徑,于是就能确定一個直徑為px的圓;
代碼:給出了個值,按理應該是要畫一個橢圓的,但個值相等,是以這個橢圓其實此時是個正圓形态。需要注意的是,代碼如果加上 circle,那将是錯誤文法,因為這是個值隻有橢圓才接受;
代碼:表示了一個水準半徑為px,垂直半徑為px的橢圓
.test {
background: radial-gradient(circle at center, #f00, #ff0, #080);
}
.test2 {
background: radial-gradient(circle closest-side, #f00, #ff0, #080);
}
.test3 {
background: radial-gradient(farthest-side, #f00 %, #ff0 %, #080 %);
}
.test4 {
background: radial-gradient(at top right, #f00, #ff0, #080);
}
.test5 {
background: radial-gradient(farthest-side at top right, #f00, #ff0, #080);
}
.test6 {
background:
radial-gradient(farthest-side at top right, #f00, #ff0, #080, transparent),
過渡( 超級重要)
transition-property設定過渡屬性
transition-duration設定過渡時間
transition-timing-function設定過渡速度(規定過渡效果的時間曲線。預設是 “ease”。)
transition-delay設定過渡延時
Internet Explorer 10、Firefox、Chrome 以及 Opera 支援 transition 屬性。
Safari 需要字首 -webkit-。
注釋:Internet Explorer 9 以及更早的版本,不支援 transition 屬性。
注釋:Chrome 25 以及更早的版本,需要字首 -webkit-。
div
{
transition: width s linear s;
/* Firefox 4 */
-moz-transition:width s linear s;
/* Safari and Chrome */
-webkit-transition:width s linear s;
/* Opera */
-o-transition:width s linear s;
//多個屬性過渡用逗号隔開,1s是整個過渡時間為1s,2s是延時2s才開始。
}
2D轉換(超級重要)
1、移動 translate(x, y) 可以改變元素的位置,x、y可為負值;
a) 移動位置相當于自身原來位置
b) y軸正方向朝下
c) 除了可以像素值,也可以是百分比,相對于自身的寬度或高度
2、縮放 scale(x, y) 可以對元素進行水準和垂直方向的縮放,x、y的取值可為小數;
3、旋轉 rotate(deg) 可以對元素進行旋轉,正值為順時針,負值為逆時針;
a) 當元素旋轉以後,坐标軸也跟着發生的轉變
b) 調整順序可以解決,把旋轉放到最後
4、傾斜 skew(deg, deg) 可以使元素按一定的角度進行傾斜,可為負值,第二個參數不寫預設為0。
3D轉換
用X、Y、Z分别表示空間的3個次元,三條軸互相垂直。如下圖

1、透視(perspective)
電腦顯示屏是一個2D平面,圖像之是以具有立體感(3D效果),其實隻是一種視覺呈現 ,通過透視可以實作此目的。
透視可以将一個2D平面,在轉換的過程當中,呈現3D效果。(沒有perspective,便“沒有”Z軸)
目前浏覽器都不支援 perspective 屬性。
Chrome 和 Safari 支援替代的 -webkit-perspective 屬性。
3、perspective有兩種寫法
a) 作為一個屬性,設定給父元素,作用于所有3D轉換的子元素
b) 作為transform屬性的一個值,做用于元素自身
4、左手坐标系
伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方。這樣我們就建立了一個左手坐标系,拇指、食指和中指分别代表X、Y、Z軸的正方向。如下圖
5、左手法則
左手握住旋轉軸,豎起拇指指向旋轉軸正方向,正向就是其餘手指卷曲的方向。
6、了解透視距離
透視會産生“近大遠小”的效果
7、3D呈現(transform-style)
設定内嵌的元素在 3D 空間如何呈現,這些子元素必須為變形原素。
flat:所有子元素在 2D 平面呈現
preserve-3d:保留3D空間
8、backface-visibility
動畫
動畫是CSS3中具有颠覆性的特征之一,可通過設定多個節點來精确控制一個或一組動畫,常用來實作複雜的動畫效果。
1、必要元素:
a、通過@keyframes指定動畫序列;
b、通過百分比将動畫序列分割成多個節點;
c、在各節點中分别定義各屬性
d、通過animation将動畫應用于相應元素;
2、關鍵屬性
a、animation-name設定動畫序列名稱
b、animation-duration動畫持續時間
c、animation-delay動畫延時時間
d、animation-timing-function動畫執行速度,linear、ease等
e、animation-play-state動畫播放狀态,running、paused等
f、animation-direction動畫逆播,alternate等
g、animation-fill-mode動畫執行完畢後狀态,forwards、backwards等
h、animation-iteration-count動畫執行次數,inifinate等
i、steps(60) 表示動畫分成60步完成
參數值的順序:
關于幾個值,除了名字,動畫時間,延時有嚴格順序要求其它随意
@keyframes myfirst
{
0% {background: red; left:px; top:px;}
25% {background: yellow; left:px; top:px;}
50% {background: blue; left:px; top:px;}
75% {background: green; left:px; top:px;}
100% {background: red; left:px; top:px;}
}
@-moz-keyframes myfirst /* Firefox */
{
0% {background: red; left:px; top:px;}
25% {background: yellow; left:px; top:px;}
50% {background: blue; left:px; top:px;}
75% {background: green; left:px; top:px;}
100% {background: red; left:px; top:px;}
}
@-webkit-keyframes myfirst /* Safari 和 Chrome */
{
0% {background: red; left:px; top:px;}
25% {background: yellow; left:px; top:px;}
50% {background: blue; left:px; top:px;}
75% {background: green; left:px; top:px;}
100% {background: red; left:px; top:px;}
}
@-o-keyframes myfirst /* Opera */
{
0% {background: red; left:px; top:px;}
25% {background: yellow; left:px; top:px;}
50% {background: blue; left:px; top:px;}
75% {background: green; left:px; top:px;}
100% {background: red; left:px; top:px;}
//調用
div
{
animation: myfirst s;
-moz-animation: myfirst s; /* Firefox */
-webkit-animation: myfirst s; /* Safari 和 Chrome */
-o-animation: myfirst s; /* Opera */
}
//第二種
div
{
animation: myfirst s linear s infinite alternate;
/* Firefox: */
-moz-animation: myfirst s linear s infinite alternate;
/* Safari 和 Chrome: */
-webkit-animation: myfirst s linear s infinite alternate;
/* Opera: */
-o-animation: myfirst s linear s infinite alternate;
}
伸縮布局
推薦學習
CSS3在布局方面做了非常大的改進,使得我們對塊級元素的布局排列變得十分靈活,适應性非常強,其強大的伸縮性,在響應式開中可以發揮極大的作用。
如下圖,學習新的概念:
主軸:Flex容器的主軸主要用來配置Flex項目,預設是水準方向
側軸:與主軸垂直的軸稱作側軸,預設是垂直方向的
方向:預設主軸從左向右,側軸預設從上到下
主軸和側軸并不是固定不變的,通過flex-direction可以互換。
CSS3彈性伸縮布局新版本
1.開啟彈性伸縮布局
display:flexbox;
2.設定布局中元素的排列方式和順序
flex-direction
可選的參數
row 水準
column 垂直
row-reverse 水準反向
column-reverse 垂直反向
3.設定無法容納時,自動換行
flex-wrap
可選的參數
nowrap 預設值都在一行或一列顯示
wrap 伸縮項目無法容納時,自動換行
wrap-reverse 伸縮項目無法容納時,自動換行,方向和wrap相反
4.flex-flow
集合了flex-direction 和 flex-wrap 的簡寫方式
display:flex;
flex-flow:row-reverse wrap;
5.justify-content調整主軸對齊
可選的參數
flex-start 伸縮項目以容器的起始點靠齊
flex-end 伸縮項目以容器的結束點靠齊
center 伸縮項目以容器的中心靠齊
space-between 伸縮項目平均分布(類似于老版本的-xxx-box-pack:justify,而且webkit和moz都是通用的)
space-around 伸縮項目平均分布,但兩邊留下伸縮項目之間距離一半的空白
6.align-items調整側軸對齊
可選的參考值
flex-start元素向側軸起點對齊。
flex-end元素向側軸終點對齊。
center元素向側軸中間對齊。
baseline如彈性盒子元素的行内軸與側軸為同一條,則該值與’flex-start’等效。其它情況下,該值将參與基線對齊。
stretch彈性元素被在側軸方向被拉伸到與容器相同的高度或寬度。
7.flex子項目在主軸的縮放比例,不指定flex屬性,則不參與伸縮配置設定
8.align-content堆棧(由flex-wrap産生的獨立行)對齊
9.order控制子項目的排列順序,正序方式排序,從小到大
10.align-self 此屬性規定某一個特定的伸縮項元素在次軸上的布局方式,在某個元素上設定該屬性會覆寫它的align-items屬性。也就是這個屬性會讓某個元素更有個性,不走尋常路~
web字型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*聲明字型*/
/*聲明的第一個字型*/
@font-face {
font-family: 'itcast';
src: url('./fonts/webfont.eot'); /* IE9*/
src: url('./fonts/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('./fonts/webfont.woff') format('woff'), /* chrome、firefox */
url('./fonts/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('./fonts/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
}
/*聲明的第二個字型*/
@font-face {
font-family: 'myfont';
src: url('./fonts/webfont.eot'); /* IE9*/
src: url('./fonts/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('./fonts/webfont.woff') format('woff'), /* chrome、firefox */
url('./fonts/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('./fonts/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
}
.font {
font-family: 'itcast';
font-size: px;
font-style: normal;
}
.myfont{
font-family: "myfont";
font-size: px;
color: red;
font-style: normal;
}
</style>
</head>
<body>
<i class="font">執子之手,将子拖走!子若不走,拍暈了繼續拖走!</i>
<br>
<i class="font">執子之手,方知子醜,淚流滿面,子不走我走</i>
<i class="myfont">執子之手,方知子醜,淚流滿面,子不走我走</i>
</body>
</html>