CSS3簡介
CSS3的現狀
- 瀏覽器支持程度差,需要添加<a href="#abc">私有前綴</a>;
- 移動端支持優于PC端;
- 不斷改進中;
- 應用相對廣泛,
-webkit-border-radius
(radius 半徑)。
- 要遵循漸進原則。
準備工作
環境準備
- 由于CSS3兼容性問題的普遍存在,為了避免因兼容性帶來的干擾,我們約定統一的環境,以保證學習的效率,在最后會單獨說明兼容性的問題。
- Chrome瀏覽器 version 46+
- Firefox瀏覽器 firefox 42+
如何使用手冊
- 程序開發是一個不斷學習的過程,學會使用工具,可以讓我們事半功倍。
-
[]
:表示全部可選項 padding -
||
:1個或者更多; -
|
:多選一; -
?
:表示0個或者1個; -
*
:表示0個或者多個; -
{}
:表示范圍。 -
注
:學習過程中一定要學會查看手冊,培養自主學習能力。
基礎知識
選擇器
CSS3新增了許多靈活查找元素的方法,極大的提高了查找元素的效率和精準度。CSS3選擇器與jQuery中所提供的絕大部分選擇器兼容。
-
之前學過的選擇器:
- div{}:標簽選擇器;
- .box{}:類選擇器;
-
#box
:id選擇器; - div p:后代選擇器;
- div.box:交集選擇器;
- div,p,span:并集選擇器;
- div>p:子代選擇器;
- *:通配符;
- div+p:選擇div后面的第一個兄弟p(p必須要緊跟在div之后);
- div~p:選中div后面所有的兄弟p。
屬性選擇器:[]
其特點是通過屬性來選擇元素,具體有以下5種形式:
E[attr],表示存在attr屬性即可:
div[title]
:表示頁面中帶有title屬性的div;E[attr=val]表示屬性值
完全等于
val:div[class=mydemo]
;E[attr*=val]
表示的屬性值里包含val字符并且在“任意”位置:div[class*=mydemo]
;E[attr^=val]表示的屬性值里包含val字符并且在“開始”位置:
div[class^=mydemo]
;E[attr
=demos]`;
案例:配合jQuery 的過濾選擇器
偽類選擇器
除了以前學過的:link、:visited、:hover、:active、:focus,CSS3又新增了其它的偽類選擇器。
以某元素相對于其父元素或兄弟元素的位置來獲取元素的
結構偽類
。重點理解通過E來確定元素的父元素;
所選到的元素的類型,必須是指定的類型E,否則無效。
E:first-child
:第一個子元素;E:last-child
:最后一個子元素;E:nth-child(n)
:第n個子元素,編號從1開始,計算方法是元素E的全部兄弟元素;
//第三個元素
div>ul>li:nth-child(3){
color: deeppink;
}
- E:nth-last-child(n)同E:nth-child(n) 相似,只是倒著計算;
div>ul>li:last-child(2){
color: deeppink;
}
- n遵循`線性變化`,其取值0、1、2、3、4、... 但是當n<=0時,選取無效。
- 選中所有的奇數的li:`括號中的表達式形式必須是n在前`
li:nth-child(2n-1){
color: red;
}
- 選中所有的7的倍數的li:
li:nth-child(7n){
color: red;
}
- 選中前面五個:
li:nth-child(-1n+5){
color: red;
}
- 選中后面五個:
li:nth-last-child(-1n+5){
color: red;
}
- 所有的偶數
li:nth-child(even){
color:red
}
- 所有的奇數
li:nth-child(odd){
color:blue;
}
- n可是多種形式:nth-child(2n)、nth-child(2n+1)、nth-child(-1n+5)等;
- 案例:日歷圖。
E:empty
:選中沒有任何子節點的E元素(使用不是非常廣泛),沒有任何的子元素,包括空格,即元素為空的狀態。目標偽類:
E:target
結合錨點進行使用,處于當前錨點
的元素被選中,表示元素被激活的狀態;
<li><a href="#title1">CSS (層疊樣式表)</a></li>
<h2 id="title1">CSS (層疊樣式表)</h2>
h2:target{
color:red;
}
- 點擊章節進行相應跳轉變色。
偽元素選擇器
- 偽元素:
- 重點:
E::before
、E::after
,是一個行內元素,需要轉換成塊元素; - E:after、E:before在舊版本里是偽類,在新版本里是偽元素,新版本下E:after、E:before會被自動識別為E::after、E::before,按偽元素來對待,這樣做的目的是用來做
兼容處理
,必須要有content
,否則無法顯示。E:after、E:before后面的練習中會反復用到,目前只需要有個大致了解。
.box::before{
content:"今天";
}
.box::after{
content:"真好";
}
- 偽元素選擇器:
- E::first-letter文本的第一個字母或
字
(如中文、日文、韓文等); - 案例:首字下沉
- E::first-line,文本第一行;
- E::selection,選中的文本,可以根據這個效果去更改選中區域的樣式(可以更改背景顏色和文字顏色,但是不能改變字體大小);
-
":"
與"::"
區別在于區分偽類和偽元素 - 關于before和after:
- CSS2中,E:before或者E:after,是屬于偽類的,并且沒有偽元素的概念;
- CSS3中,提出偽元素的概念 E::before和E::after,并且歸屬到了偽元素當中,偽類里就不再存在E:before或者E:after偽類。
顏色
一種新的顏色的表示方式:rgba(255,0,0,0.1),RGBA是代表Red(紅色)、Green(綠色)、Blue(藍色)和Alpha的色彩空間。雖然它有的時候被描述為一個顏色空間。
新增了RGBA、HSLA模式,其中的A 表示透明度通道,即可以設置顏色值的透明度,相較opacity,它們不具有繼承性,即不會影響子元素的透明度。
Red、Green、Blue、Alpha即RGBA;
R、G、B 取值范圍0~255。
Hue、Saturation、Lightness、Alpha即HSLA;
H:色調,取值范圍0~360,0/360表示紅色、120表示綠色、240表示藍色;
S:飽和度,取值范圍0%~100%;
L:亮度,取值范圍0%~100%;
A:透明度,取值范圍0~1。
關于透明度:
opacity,只能針對整個盒子設置透明度,子盒子及內容會繼承父盒子的透明度(此時不能再設置子盒子的透明度);
transparent,可以單獨設置透明度,但是不可調節透明度,始終完全透明;
RGBA、HSLA可應用于所有使用顏色的地方。
案例:
opacity,設置透明度,只能針對整個盒子設置透明度,子盒子會繼承父盒子的透明度。
.out{
width: 200px;
height: 200px;
background: green;
border: 1px solid darkgreen;
margin: 40px auto;
opacity: 0.3;
}
子盒子也出現透明
.out .inner{
width: 100px;
height: 100px;
background-color: yellow;
}
- background-color: transparent,完全透明,不可調節透明度.
- 使用rgba來控制顏色,相對opacity ,
不具有繼承性
。
文本 (shadow陰影)
text-shadow,可分別設置偏移量、模糊度、顏色(可設透明度)。
- 水平偏移量,正值向右,負值向左;
- 垂直偏移量,正值向下,負值向上;
- 模糊度不能為負值,值越大越模糊;
- 顏色,設置對陰影的顏色,可以有多個影子。
代碼演示:
// 3px,水平偏移量。正值向右 負值向左
//5px,垂直偏移量,正值向下 負值向上
//5px,模糊度,模糊度不能為負值,值越大越模糊
//#ccc,設置對象陰影的顏色。可以有多個影子.
ul>li{
margin: 20px;
font-size: 24px;
}
ul>li:nth-child(1){
text-shadow: 5px 5px 2px #ccc;
}
ul>li:nth-child(2){
text-shadow: -5px -5px 2px #ccc;
}
ul>li:nth-child(3){
text-shadow: 5px 5px 2px #ccc, -5px -5px 2px #ccc;
}
- 案例:浮雕文字.
/*設置背景色.*/
body {
background-color: gray;
font: bold 6em "microsoft yahei";
}
div {
margin: 30px;
color: #808080;
text-align: center;
}
/*設置水平向左1px 向上1 px 向右1px 向下1px */
.to{
text-shadow: -1px -1px 1px #000,1px 1px 1px #fff;
}
.ao{
text-shadow: -1px -1px 1px #000,1px 1px 1px #fff;
}
盒模型
CSS3中可以通過box-sizing來指定盒模型,即可指定為content-box、border-box,這樣我們計算盒子大小的方式就發生了改變。
box-sizing有兩個值:content-box、border-box。可以分成兩種情況:
content-box
:外加模式,對象的實際寬度等于設置的width值和border、padding之和
;border-box
:內減模式,對象的實際寬度就等于設置的width
值,即使定義有border和padding也不會改變對象的實際寬度,即 ( Element width = width ),我們把這種方式叫做盒模型。默認是外加模式。
兼容性比較好。
練習:圖片展示(內減模式)
<span id="abc">瀏覽器私有化前綴:</span>
- 谷歌、Safari瀏覽器內核:-webkit-;
- 火狐瀏覽器內核:-moz-;
- IE瀏覽器內核:-ms-;
- 歐鵬瀏覽器內核:-o-;
.box{
width:200px;
height:200px;
border:1px solid #000;
/*background:linear-gradient(left,red,blue);*/
/*以上屬性,一般的瀏覽器都不支持,加上對應的前綴即可被相應的瀏覽器識別,如下*/
background:-webkit-linear-gradient(left,red,blue);
background:-moz-linear-gradient(left,red,blue);
background:-ms-linear-gradient(left,red,blue);
background:-o-linear-gradient(left,red,blue);
}
邊框
-
邊框圓角
、邊框陰影
屬性,應用十分廣泛,兼容性也相對較好,具有符合漸進增強原則的特征,需要重點掌握
。
邊框圓角
-
border-top-radius
:每個角可以設置兩個值,第一個值x值是水平方向上的值,第二個y值是垂直方向上的值; - border-radius:可以有一個值、兩個值、三個值、四個值,還可以用“/”分割橫坐標和縱坐標的值;賦值順序,從左上順時針進行賦值,如果沒有值就取對角的值;
- 邊框圓角處理、正方形、扇形;
- 橢圓,圓角處理時,腦中要形成圓、圓心、橫軸、縱軸的概念,正圓是橢圓的一種特殊情況。
- 以“/”進行分隔,可分別設置長、短半徑,遵循順時針規則,左上角為1,“/”前面的1~4個用來設置橫軸半徑(分別對應橫軸1、2、3、4位置 ),“/”后面1~4個參數用來設置縱軸半徑(分別對應縱軸1、2、3、4位置 )
border-radius:40px 50px 20px 40px / 10px 10px 10px 10px;
邊框陰影
box-shadow
與text-shadow
用法差不多.
- 水平偏移量,正值向右,負值向左;
- 垂直偏移量,正值向下,負值向上;
.box{
box-shadow: 5px 5px 5px 27px red, -5px -5px 5px -5px green;
}
- 模糊度是不能為負值;
- 陰影大小;
- 陰影顏色;
- inset可以設置內陰影;
.box{
box-shadow:inset 5px 5px 5px 5px red,inset -5px -5px 5px -5px green;
}
7 注
:設置邊框陰影不會改變盒子的大小,即不會影響其兄弟元素的布局。
可以設置多重邊框陰影,實現更好的效果,增強立體感。
邊框圖片(了解)
-
border-image
:設置邊框的背景圖片;
border-image: url("images/border.png") 27/20px round
- 盒子的總寬高不會改變;
-
border-image-source:url("")
:設置邊框圖片的地址; -
border-image-slice:27,27,27,27
:裁剪圖片,如何去裁切圖片,瀏覽器會自動去裁剪圖片; -
border-image-width:20px;
:指定邊框的寬度; - 邊框平鋪的樣式:
border-image-repeat: stretch;
- stretch,拉升;
- round:平鋪,會自動調整縮放比例(如果谷歌版本很高可能會出現問題);
- repeat(重復):正常平鋪,但是可能會顯示不完整。
- 設置的圖片將會被“切割”成九宮格形式,然后進行設置:
- “切割”完成后生成虛擬的9塊圖形,然后按對應位置設置背景,
- 其中四個角位置、形狀保持不變,中心位置水平垂直兩個方向平鋪;
round和repeat之間的區別:
round會自動調整尺寸,完整顯示邊框圖片。
repeat單純平鋪多余部分,會被“裁切”而不能完整顯示。
更改裁切尺寸:
background-slice: 34 36 27 27
- 關于邊框圖片重點理解9宮格的裁切及平鋪方式,實際開發中應用不廣泛,但是如能靈活運用會給我們帶來不少便利。
- 案例:用css 實現
漸變
- 漸變是CSS3當中比較豐富多彩的一個特性,通過漸變我們可以實現許多炫麗的效果,有效的減少圖片的使用數量,并且具有很強的適應性和可擴展性。
可分為線性漸變、徑向漸變
線性漸變 (gradient 變化,屬于背景圖片里)
- linear-gradient線性漸變指沿著某條直線朝一個方向產生漸變效果。
- 例如從黃色水平漸變到綠色:
background-image:linear-gradient(
to right, 表示方向 (left,top,right,left ,也可以使用度數)
Yellow, 漸變起始顏色
Green 漸變終止顏色
)
background:linear-gradient(
to right,
red 0%, red 25% ,
blue 25%,blue 50%,
green 50%,green 75%,
pink 75% ,pink 100%
); //前一個是起始顏色,后一個是終止顏色,百分比為占總長度的百分比
.box6{
width: 600px;
height: 150px;
background: linear-gradient(135deg,#000 0%, #000 10%, #fff 10%, #fff 20%,#000 20%, #000 30%, #fff 30%, #fff 40%,#000 40%, #000 50%, #fff 50%, #fff 60%,#000 60%, #000 70%, #fff 70%, #fff 80%,#000 80%, #000 90%, #fff 90%, #fff 100%);
animation: gun 5s linear infinite;
background-size: 100px 150px;
}
@keyframes gun {
from{
}
to{
background-position: 100px 0px;
}
}
- 必要的元素:
- a、方向
- b、起始顏色
- c、終止色;
- 方向:垂直向上為0度,順時針逐漸增大。
徑向漸變 (radial 徑向)
-
radial-gradient
:徑向漸變指從一個中心點開始,沿著四周產生漸變效果:
background: radial-gradient(
150px at center,
yellow,
green
);
圍繞中心點做漸變,半徑是150px,從黃顏色到綠顏色做漸變。
必要的元素:
a、中心點,即圓的中心(中心點的位置是以盒子自身)
background: radial-gradient(
150px at left center,
yellow,
green
);
以左上角為圓的中心點
background: radial-gradient(
150px at 0px 0px,
yellow,
green
);
- b、漸變起始色
- c、漸變終止色
- 關于中心點:中心位置參照的是盒子的左上角;
- 關于輻射范圍:其半徑可以不等,即可以是橢圓;
div{
width: 300px;
height: 300px;
margin:100px auto;
background: radial-gradient(
250px at 0px 0px,
yellow,
green
);
border-radius: 150px;
}
背景
- 背景在CSS3中也得到很大程度的增強,比如背景圖片尺寸、背景裁切區域、背景定位參照點、多重背景等。
- background-size:width,height,可以設置背景圖片的寬度以及高度。
background-size設置背景圖片的尺寸
background-size:600px auto;
:自動是適應盒子的寬度;background-size:100% 100%;
:通過百分比設置背景圖片大小;通過具體數值來調整背景的尺寸:
background-size: 100px 100px;
。cover
:會自動調整縮放比例,保證圖片始終填充滿背景區域,如有溢出部分則會被隱藏,圖片有可能不完整顯示。contain
:會自動調整縮放比例,保證圖片始終完整
顯示在背景區域;但是不保證鋪滿盒子,也可以使用長度單位或百分比 。案例:全屏背景自動適應。
background-origin(原點,起點)設置背景定位的原點
- 所謂的背景原點就是調整背景位置的一個參照點,調整背景圖片定位的參照原點。
- border-box以
邊框
做為參考原點; - padding-box以
內邊距
做為參考原點(默認值); - content-box以
內容區
做為參考點。
background-clip設置背景區域clip(裁切)
- border-box裁切
邊框以內
為背景區域,邊框外邊緣
; - padding-box裁切
內邊距以內
為背景區域; - content-box裁切
內容區
做為背景區域;
以逗號分隔可以設置多背景,可用于自適應局
- 背景圖片尺寸在實際開發中應用十分廣泛。
案例:
- 相框;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>相框</title>
<style>
.album{
width: 623px;
height: 417px;
border: 1px solid #000;
background:
url("images/bg1.png") no-repeat,
url("images/bg2.png") no-repeat right top,
url("images/bg3.png") no-repeat right bottom,
url("images/bg4.png") no-repeat bottom left,
url("images/bg5.png") no-repeat center;
font: 700 60px/400px "Microsoft Yahei";
text-align: center;
}
</style>
</head>
<body>
<div class="album">永垂不朽</div>
</body>
</html>
- 手機界面。
- 如果有背景顏色,必須加載最后一個url后面。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>相框</title>
<style>
.phone{
width: 639px;
height: 800px;
border: 1px solid #000;
margin: 20px auto;
background: url("images/head.jpg") no-repeat top,url("images/foot.jpg") no-repeat bottom,rgb(45,0,130);
}
</style>
</head>
<body>
<div class="phone"></div>
</body>
</html>
過渡(transition)重點
- Transition:param1 param2
- param1:要過渡的屬性;
- param2:過渡的時間。
- 過渡是CSS3中具有顛覆性的特征之一,可以實現元素不同狀態間的平滑過渡(補間動畫),經常用來制作動畫效果;
- 補間動畫:自動完成從起始狀態到終止狀態的的過渡。不用管中間的狀態;
- 幀動畫:撲克牌切換.通過一幀一幀的畫面按照固定順序和速度播放。如電影膠片
- 關于補間動畫更多學習可查看http://mux.alimama.com/posts/1009
- 特點:當前元素只要有“屬性”發生變化時,可以平滑的進行過渡。
- 相關屬性:
- transition-property設置過渡屬性;,默認值為all;
- transition-duration設置過渡時間,
- transition-timing-function設置過渡的動畫類型,linear(勻速)、ease-in (由慢到快)、ease(平滑過渡,默認值);
- transition-delay設置過渡延時,過了多長時間后執行動畫。
案例:
- 氣泡
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>氣泡</title>
<style>
.paopao{
width: 350px;
height: 150px;
border: 1px solid #000;
margin: 20px auto;
background: url("images/paopao.png") no-repeat top left,url("images/paopao.png") no-repeat right bottom;
background-color: #000;
transition: 3s linear;
}
.paopao:hover{
background-position: bottom left,right top;
}
</style>
</head>
<body>
<div class="paopao"></div>
</body>
</html>
- 商品列表
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>邊框陰影</title>
<style>
body{
background-color: #ddd;
}
.items{
margin: 30px auto;
width: 1250px;
height: 300px;
}
.item{
float: left;
width: 230px;
height: 300px;
margin-right: 20px;
text-align: center;
background-color: #fff;
position: relative;
overflow: hidden;
transition: 0.5s linear;
}
.pic{
margin-top: 30px;
}
.desc{
height: 60px;
width: 100%;
background-color: #f90;
bottom: -60px;
position: absolute;
transition: 0.5s linear;
}
.item:hover{
box-shadow: 0 0 18px #999;
top: -5px;
}
.item:hover .desc{
bottom: 0;
}
</style>
</head>
<body>
<div class="items">
<div class="item">

</div>
<div class="item">

<div class="desc"></div>
</div>
<div class="item">

<div class="desc"></div>
</div>
<div class="item">

<div class="desc"></div>
</div>
<div class="item">

<div class="desc"></div>
</div>
</div>
</body>
</html>
- 手風琴效果
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>手風琴</title>
<style>
.accordion{
margin: 60px auto;
width: 400px;
}
.sec{
border-bottom: 1px solid #00f;
background-color: #993;
transition: 0.5s linear;
}
.title{
height: 30px;
line-height: 30px;
margin-left: 20px;
}
.con{
height: 0;
background-color: transparent;
transition: 0.5s linear;
}
.sec:last-child{
border-bottom: none;
}
.sec:hover{
background-color: #9f3;
}
.sec:hover .con{
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div class="accordion">
<div class="sec">
<div class="title">新聞標題</div>
<div class="con"></div>
</div>
<div class="sec">
<div class="title">新聞標題</div>
<div class="con"></div>
</div>
<div class="sec">
<div class="title">新聞標題</div>
<div class="con"></div>
</div>
<div class="sec">
<div class="title">新聞標題</div>
<div class="con"></div>
</div>
</div>
</body>
</html>
2D轉換重點
轉換是CSS3中具有顛覆性的特征之一,可以實現元素的位移、旋轉、變形、縮放,甚至支持矩陣方式,配合剛學習的過渡和動畫知識,可以取代大量之前只能靠Flash才可以實現的效果。在css3 當中,通過
transform(變形)
來實現2d 或者3d 轉換,其中2d 有:縮放、移動、旋轉。移動
translate(x,y)
可以改變元素的位置,x、y可為負值,移動位置相對于自身原來位置
;x,在水平方向移動;
y,在垂直方向移動;
如果只有一個參數,默認為水平方向;
除了可以是像素值,也可以是百分比,相對于
自身的寬度或高度
。縮放
scale(x,y)
可以對元素進行水平和垂直方向的縮放,x、y的取值可為小數,不可為負值,大于1時為放大,小于1時為縮小。旋轉
rotate(45deg)
,可以對元素進行旋轉,正值為順時針,負值為逆時針。當元素旋轉以后,坐標軸也跟著發生轉變;
調整順序可以解決,把旋轉放到最后。
傾斜:
skew(deg,deg)
可以使元素按一定的角度進行傾斜,可為負值,第二個參數不寫默認為0;第一個值為水平方向上傾斜的角度;
第二個值為垂直方向上傾斜的角度
矩陣:
matrix()
把所有的2D轉換組合到一起,需要6個參數(了解)。transform-origin
:可以調整元素轉換的原點。我們可以同時使用多個轉換,其格式為:
transform: translate() rotate() scale();
...等,其順序會影響轉換的效果。
案例
- 盒子水平居中對齊;
.box{
//距父盒子左側距離為父盒子寬度一半
margin-left:50%;
//往左側移動自身寬度的一般
transform:translate(-50%);
}
- 火箭移動;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>小火箭</title>
<style>
html,body{
width: 100%;
height: 100%;
}
body{
background-color: rgb(229,175,97);
}
img{
position: absolute;
left: 100px;
bottom: 0;
width: 80px;
border: 1px solid #000;
transform: translate(0px,150px) rotate(45deg);
transition: all 1s;
}
body:hover img{
transform: translate(600px,-300px) rotate(90deg);
}
</style>
</head>
<body>

</body>
</html>
- 盾牌,將位置還原
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>盾牌</title>
<style>
body{
background-color: #000;
}
.shield{
margin:60px auto;
width: 420px;
}
img{
transition: 0.3s;
}
img:nth-child(1){
transform: translate(-184px,-52px) rotate(45deg);
}
img:nth-child(2){
transform: translate(0px,-50px) rotate(0deg);
}
img:nth-child(3){
transform: translate(52px,30px) rotate(45deg);
}
img:nth-child(4){
transform: translate(-52px,30px) rotate(-45deg);
}
img:nth-child(6){
transform: translate(152px,30px) rotate(45deg);
}
img:nth-child(7){
transform: translate(-72px,30px) rotate(45deg);
}
img:nth-child(8){
transform: translate(0px,50px) rotate(0deg);
}
img:nth-child(9){
transform: translate(40px,50px) rotate(-30deg);
}
.shield:hover img{
transform: none;
}
</style>
</head>
<body>
<div class="shield">









</div>
</body>
</html>
- 旋轉 原點:transform-origin:left top;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>對話框</title>
<style>
div{
/*border: 1px solid #000;*/
background-color: pink;
}
.bigBox{
width: 200px;
height: 60px;
margin-top: 40px;
position: relative;
}
.smallBox{
width: 40px;
height: 40px;
position: absolute;
}
.sBox1{
left: 50%;
transform: translate(-50%);
transform: rotate(45deg);
transform-origin: left top;
top: -10px;
}
.sBox2{
right: 0;
top: 10px;
transform: translateY(-50%);
transform: rotate(45deg);
}
.sBox3{
left: 50%;
transform: translate(-50%);
transform: rotate(45deg);
transform-origin: left top;
bottom: 10px;
}
.sBox4{
top: 10px;
transform: rotate(45deg);
}
</style>
</head>
<body>
<div class="box1 bigBox">
<div class="sBox1 smallBox"></div>
</div>
<div class="box2 bigBox">
<div class="sBox2 smallBox"></div>
</div>
<div class="box3 bigBox">
<div class="sBox3 smallBox"></div>
</div>
<div class="box4 bigBox">
<div class="sBox4 smallBox"></div>
</div>
</body>
</html>
- 撲克牌
- 心形
3D轉換
左手坐標系
伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方。這樣我們就建立了一個左手坐標系,拇指、食指和中指分別代表X、Y、Z軸的正方向。
CSS中的3D坐標系:
CSS3中的3D坐標系與上述的3D坐標系是有一定區別的,相當于其繞著X軸旋轉了180度。
-
借助示例理解3D轉換:
- 繞X軸旋轉;
- 繞Y軸旋轉;
- 繞Z軸旋轉;
- 在X軸移動;
- 在Y軸移動;
- 在Z軸移動。
左手法則
- 左手握住旋轉軸,豎起拇指指向旋轉軸正方向,
正向就是其余手指卷曲的方向
。
透視(perspective)
電腦顯示屏是一個2D平面,圖像之所以具有立體感(3D效果),其實只是一種視覺呈現,通過透視可以實現此目的,并不是真正的3D。
透視可以將一個2D平面,在轉換的過程當中,呈現3D效果。
注:并非任何情況下需要透視效果,根據開發需要進行設置。
perspective有兩種寫法
- 作為一個屬性,設置給父元素,作用于所有3D轉換的子元素;
- 作為transform屬性的一個值,做用于元素自身(使用較少)。
<div class="b1" transform="perspective:30px">
- 理解透視距離:
- 透視會產生“近大遠小”的效果.
案例:
- 音樂盒;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3D</title>
<style>
body{
background: #ccc;
}
div:nth-child(1){
width: 300px;
height: 300px;
margin: 40px auto;
position: relative;
}
div:nth-child(1)::before,div:nth-child(1)::after{
content: "";
width: 300px;
height: 300px;
position: absolute;
left: 0;
top: 0;
background: url("images-3D/musict.jpg") no-repeat;
border-radius: 50%;
transition: all 3s;
transform-origin: bottom;
}
div:nth-child(1)::before{
background: url("images-3D/musicb.jpg");
}
div:nth-child(1):hover::after{
transform: rotateX(180deg);
}
</style>
</head>
<body>
<div></div>
<audio src="images-3D/style.mp3" loop></audio>
<script>
var open = document.querySelector("div:nth-child(1)");
var music = document.querySelector("audio");
open.onmousemove = function () {
music.play();
};
open.onmouseleave = function () {
music.pause();
}
</script>
</body>
</html>
- 百度錢包;
- 設置元素背面是否可見:
backface-visibility;
; - 翻轉的文字;
- 通過偽元素來獲取自定義屬性的值:
attr(data-text);
- 3D導航;
- 立體導航欄。
3D呈現(transform-style)
設置內嵌的元素在3D空間如何呈現,這些子元素必須為轉換原素.
flat:所有子元素在 2D 平面呈現;
preserve-3d:保留3D空間;
3D元素構建是指某個圖形是由多個元素構成的,可以給這些元素的父元素設置
transform-style:preserve-3d
來使其變成一個真正的3D圖形。
案例:
- 立方體;
- 3D導航;
- 立體導航條
動畫
動畫是CSS3中具有顛覆性的特征之一,可通過設置多個節點來精確控制一個或一組動畫,常用來實現復雜的動畫效果。
必要元素:
通過@keyframes指定動畫序列;
通過百分比將動畫序列分割成多個節點;
在各節點中分別定義各屬性
通過animation將動畫應用于相應元素;
使用:
類似js中的函數:先定義,再調用;
定義動畫:
@keyframes 動畫名{
from{初始狀態}
to{結束狀態}
}
- 定義多組動畫:
@keyframes move{
0%{}
25%{}
50%{}
75%{}
100%{}
}
- 調用:
- 基本調用方式:
animation: 動畫名稱 持續時間 (執行次數:3,infinite);
- 關鍵屬性
-
animation-name
:設置動畫序列名稱;
animation-duration
動畫持續時間;animation-delay
動畫延時時間;animation-timing-function動畫執行速度(運動曲線):linear、ease等;
animation-play-state動畫播放狀態,running、paused等;
animation-direction動畫的方向:normal正常,alternate可逆等;
animation-fill-mode動畫執行完畢后狀態:forwards(結束后保持結束時的狀態)、backwards(結束后保持開始時候的狀態)等;
animation-iteration-count
動畫執行次數:可以是具體數字或者inifinate
等;steps(60) 表示動畫分成60步完成。
參數值的
順序
:關鍵幾個值,除了名字、動畫時間、延時有嚴格順序要求,其它隨意。
案例
- 捕魚達人;
- 太陽系;
- 全屏切換;
- 鐘表;
- 大海波濤;
- 無縫滾動。
伸縮布局
CSS3在布局方面做了非常大的改進,使得我們對塊級元素的布局排列變得十分靈活,適應性非常強,其強大的伸縮性,在響應式開中可以發揮極大的作用。
學習新的概念:
主軸:Flex容器的主軸主要用來配置Flex項目,默認是
水平
方向;側軸:與主軸垂直的軸稱作側軸,默認是垂直方向的;
方向:默認主軸從左向右,側軸默認從上到下;
主軸和側軸并不是固定不變的,通過flex-direction可以互換
。必要元素:
指定一個盒子為伸縮盒子
display: flex;
;設置屬性來調整此盒的子元素的布局方式,例如:flex-direction;
明確主側軸及方向;
可互換主側軸,也可改變方向。
各屬性詳解
- flex-direction調整主軸方向(默認為水平方向)該屬性通過定義flex容器的主軸方向來決定felx子項在flex容器中的位置:
row,水平方向;
reverse-row,反轉(也反序),從最右邊開始向左排列,順序發生改變,從最右邊開始;
column,垂直方向;
reverse-column 反轉列。
justify-content
設置或檢索彈性盒子元素在主軸(橫軸)方向上的對齊方式:flex-start,起點對齊;
flex-end,終點對齊,順序不變;
center,中間對齊;
space-around,環繞(自動平分空白區域);
space-between,兩端對齊(中間空白區域自動平分)。
flex:多個子項目在
主軸
的縮放比例,不指定flex屬性,則不參與伸縮分配;align-items
設置或檢索彈性盒子元素在側軸(豎軸)方向上的對齊方式:flex-start,起點對齊;
flex-end,終點對齊;
center,居中對齊;
stretch,拉伸。
flex-wrap控制是否換行;
案例
- 微信底部;
- 攜程;
多列布局
- 類似報紙或雜志中的排版方式,上要用以控制大篇幅文本。
/* 分幾列*/
-webkit-column-count:3;
/* 分割線*/
-webkit-column-rule:1px dashed red;
/*設置列間距*/
-webkit-column-gap:60px;
/* 列寬度*/
-webkit-column-width: 400px;
- 如果給標題設置跨列等屬性:
-webkit-column-span:all;
text-align:center;
- 了解即可,實際意義不大。
案例
- 新聞
Web字體
- 開發人員可以為自已的網頁指定特殊的字體,無需考慮用戶電腦上是否安裝了此特殊字體,從此把特殊字體處理成圖片的時代便成為了過去。支持程度比較好,甚至IE低版本瀏覽器也能支持。
字體格式(認識字體)
不同瀏覽器所支持的字體格式是不一樣的,我們有必要了解一下有關字體格式的知識。
TureType(.ttf)格式:
.ttf字體是Windows和Mac的最常見的字體,是一種RAW格式,支持這種字體的瀏覽器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+;
OpenType(.otf)格式
.otf字體被認為是一種原始的字體格式,其內置在TureType的基礎上,支持這種字體的瀏覽器有Firefox3.5+、Chrome4.0+、Safari3.1+、Opera10.0+、iOS Mobile、Safari4.2+;
Web Open Font Format(.woff)格式
.woff字體是Web字體中
最佳
格式,他是一個開放的TrueType/OpenType的壓縮版本,同時也支持元數據包的分離,支持這種字體的瀏覽器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+;Embedded Open Type(.eot)格式
.eot字體是IE專用字體,可以從TrueType創建此格式字體,支持這種字體的瀏覽器有IE4+;
SVG(.svg)格式
.svg字體是基于SVG字體渲染的一種格式,支持這種字體的瀏覽器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+;
了解了上面的知識后,我們就需要為不同的瀏覽器準備不同格式的字體,通常我們會通過字體生成工具幫我們生成各種格式的字體,因此無需過于在意字體格式間的區別差異。
下載字體網站:推薦http://www.zhaozi.cn/ 和 http://www.youziku.com/ 查找更多中文字體。
如果要在網頁中使用web字體(用戶電腦上沒有這種字體),具體使用步驟:
導入對應的字體包;
聲明字體:告訴瀏覽器,去哪里找這個字體;
定義一個類,誰用這個類名,就會使用相應的字體。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>web字體使用</title>
<style>
/*聲明字體*/
@font-face {font-family: 'webfont';
src: url('font/webfont.eot'); /* IE9*/
src: url('font/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('font/webfont.woff') format('woff'), /* chrome、firefox */
url('font/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('font/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
}
/*定義對應的字體類*/
.webfont{
font-family:"webfont" !important;
font-size:16px;font-style:normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;}
</style>
</head>
<body>
<p class="webfont">尋尋覓覓,在無聲無息中消失。。。</p>
<p>尋尋覓覓,在無聲無息中消失。。。</p>
</body>
</html>
字體圖標
其實我們可以把文字理解成是一種特殊形狀的圖片,反之我們是不是也可以把圖片制作成字體呢?
答案是肯定的。
常見的是把網頁常用的一些小的圖標,借助工具幫我們生成一個字體包,然后就可以像使用文字一樣使用圖標了。
優點:
將所有圖標打包成字體庫,減少請求;
具有矢量性,可保證清晰度;
使用靈活,便于維護;
Font Awesome 使用介紹:http://fontawesome.dashgame.com/
定制自已的字體圖標庫:http://iconfont.cn/ 和 https://icomoon.io/
SVG素材:http://www.iconsvg.com/
使用:
首先在阿里文字圖片里面找到需要的圖片,然后加載到本地,引入到項目中;
聲明圖標文字;
定義一個類;
在需要的地方使用這個類,要配合對應的圖片編碼(圖片編碼在demo中)使用。
需要什么圖標查找對應的編碼即可:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>web字體使用</title>
<style>
/*聲明字體*/
@font-face {font-family: 'iconfont';
src: url('iconfont/iconfont.eot'); /* IE9*/
src: url('iconfont/iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('iconfont/iconfont.woff') format('woff'), /* chrome、firefox */
url('iconfont/iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('iconfont/iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
}
/*定義對應的字體類*/
.iconfont{
font-family:"iconfont" !important;
font-size:16px;font-style:normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}
span::before{
content: "\e628";
font-family: iconfont;
color: red;
}
</style>
</head>
<body>
<span>掃碼取件</span>
<p class="iconfont"></p>
</body>
</html>
兼容性
通過http://caniuse.com/ 可查詢CSS3各特性的支持程度,一般兼容性處理的常見方法是為屬性添加私有前綴,如不能解決,應避免使用,無需刻意去處理CSS3的兼容性問題。
我們需要知道每個屬性,能被哪個版本的瀏覽器支持。
高級應用
360 案例:
- 監聽滾輪
document.onmousewheel=function(){}
需要處理兼容(我們是靠監聽滾輪的事件來處理的);
我們需要使用到插件,(滾屏插件) 基于jQuery 的一個插件
jQuery fullPage
,全屏滾動插件,中文網址:http://www.dowebok.com; 相關說明:http://www.dowebok.com/77.html對應的顏色
sectionsColor:['#0da5d6', '#2AB561', '#DE8910', '#16BA9D', '#0DA5D6']
loopTop:true,滾到頂部,回到最后一屏;
js代碼:
$(function(){
$('#dowebok').fullpage({
sectionsColor:['#0da5d6', '#2AB561', '#DE8910', '#16BA9D', '#0DA5D6'],
loopTop:true,
afterLoad:function( anchorLink ,index){
console.log(index);
$('.section').removeClass('current');
setTimeout(function(){
$('.section').eq(index-1).addClass('current');
},100);
}
});
});