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

資訊專欄INFORMATION COLUMN

CSS3實(shí)現(xiàn)翻轉(zhuǎn)卡牌效果

txgcwm / 1262人閱讀

摘要:所以給父元素添加至此,就實(shí)現(xiàn)了一個(gè)翻轉(zhuǎn)卡牌的效果,但是這里需要解決一個(gè)問(wèn)題,因?yàn)閷傩圆槐恢С种С?,所以需要進(jìn)行降級(jí),我的做法是直接顯示隱藏。

今天在工作中遇到需求,需要用CSS3寫(xiě)一個(gè)卡片翻轉(zhuǎn)效果,這個(gè)效果看起來(lái)簡(jiǎn)單,但是還是涉及到一些不常用的CSS3中的3D轉(zhuǎn)換的屬性以及實(shí)現(xiàn)該效果的思路,所以這里總結(jié)一下。

原文鏈接:http://mrzhang123.github.io/2016/08/17/FlipCards/

項(xiàng)目地址:https://github.com/MrZhang123/Practice/tree/master/FlipCards

需要的CSS3屬性 perspective

目前瀏覽器都不支持perspective屬性

在chrome和Safari中需要使用-webkit-perspective,而在Firefox中需要使用-moz-perspective來(lái)定義。

定義和用法

perspective屬性定義3D元素距視圖的距離,以像素計(jì)。該屬性允許改變查看3D元素的視圖。當(dāng)為元素定義

perspective屬時(shí),其子元素會(huì)獲得透視效果,而不是元素本身。換句話說(shuō),設(shè)置這個(gè)元素是為了給該元素的子元素用。

number:元素距離視圖的距離,以像素計(jì)

none:默認(rèn)值,與0相同。不設(shè)置透視

transform-style

Firefox支持transfrom-style屬性。

Chrome、Safari和Opera支持代替的-webkit-transform-style屬性。

定義和用法

transform-style屬性固定如何在3D空間中呈現(xiàn)被嵌套的元素。一般給父元素設(shè)置讓其所有子元素跟著父元素一起位置移動(dòng),一般會(huì)設(shè)置。

flat:子元素將不保留其3D位置(默認(rèn)值)

perserve-3d:子元素將保留其3D位置

transition

IE10+、Firefox、Opera、Chrome均支持transition屬性。Safari支持替代的-webkit-transition屬性。但是IE9-不支持該屬性。

定義和用法

transition屬性是一個(gè)簡(jiǎn)寫(xiě)屬性,用于設(shè)置四個(gè)過(guò)渡屬性:

transiton-property:規(guī)定設(shè)置過(guò)渡效果的CSS屬性的名稱

transiton-duration:規(guī)定完成過(guò)渡效果需要多少秒或毫秒

transiton-timing-funciton:規(guī)定速度效果的速度曲線

transition-delay:規(guī)定過(guò)渡效果何時(shí)開(kāi)始

transiton-duration必須設(shè)置,否則時(shí)長(zhǎng)為0 ,不會(huì)有過(guò)渡效果

backface-visibility

只有IE10+和Firefox支持backface-visibility,Opera15+、Safari和Chrome支持替代的-webkit-backface-visibility

定義和用法

backface-visibility屬性定義當(dāng)前元素不面向屏幕時(shí)是否可見(jiàn),如果元素在旋轉(zhuǎn)后不希望看到背面,則可以使用。

visible:背面是可見(jiàn)的(默認(rèn)值)

hidden:背面是不可見(jiàn)的

實(shí)現(xiàn)的思路

要實(shí)現(xiàn)類似的翻牌效果,首先我們需要有一張可以翻的牌,這張牌由兩個(gè)元素重疊組成,位于上層正面我們看到,而位于下層的背面我們看不到并且本身是繞Y軸旋轉(zhuǎn)過(guò)的,這樣,當(dāng)鼠標(biāo)移動(dòng)上去后,同時(shí)讓正面和背面執(zhí)行旋轉(zhuǎn)就可以實(shí)現(xiàn)翻牌效果。

實(shí)現(xiàn)

基本結(jié)構(gòu)代碼如下:

ul,li {
    margin:0;
    padding:0;
    list-style:none;
}
#content ul li{
    width: 225px;
    height: 180px;
}
#content ul li a{
    position: relative;
    display: block;
    width: 100%;
    height: 100%;
}
#content ul li a > div{
    position: absolute;
    left: 0;
    height: 0;
    width: 100%;
    height: 100%;
    color: #fff;
}
#content ul li a div:first-child{
    background-color: rgb(255, 64, 129);
    z-index:2;
}
#content ul li a div:last-child{
    background:rgb(0, 188, 212);
    z-index:1;
}
#content ul li a div h3{
    margin: 0 auto 15px;
    padding: 15px 0;
    width: 200px;
    height: 16px;
    line-height: 16px;
    font-size: 14px;
    text-align: center;
    border-bottom: 1px #fff dashed;
}

#content ul li a div p{
    padding: 0 10px;
    font-size: 12px;
    text-indent: 2em;
    line-height: 18px;
}

這樣就讓兩個(gè)div疊在一起了,但是如果要進(jìn)行翻轉(zhuǎn)的話,首先是需要將背面本身就翻過(guò)去,當(dāng)鼠標(biāo)放上去之后翻轉(zhuǎn)過(guò)來(lái),讓我們看到,所以我們需要給背面添加翻轉(zhuǎn)180°的屬性,鼠標(biāo)放上去之后讓它翻轉(zhuǎn)到0°,同時(shí)為保證每個(gè)瀏覽器渲染統(tǒng)一,給正面加一個(gè)翻轉(zhuǎn)0°,鼠標(biāo)移動(dòng)上去之后翻轉(zhuǎn)-180°,并且是一個(gè)動(dòng)畫(huà),所以要添加過(guò)渡。所以給正面背面添加CSS如下:

#content ul li a > div{
    -webkit-transition:.8s ease-in-out;
    -moz-transition:.8s ease-in-out;
}
#content ul li a div:first-child{
    -webkit-transform:rotateY(0);
    -moz-transform:rotateY(0);
}
#content ul li a div:last-child{
    -webkit-transform:rotateY(180deg);
    -moz-transform:rotateY(180deg);
}
#content ul li a:hover div:first-child{
    -webkit-transform:rotateY(-180deg);
    -moz-transform:rotateY(-180deg);
}
#content ul li a:hover div:last-child{
    -webkit-transform:rotateY(0);
    -moz-transform:rotateY(0);
}

在添加這些CSS3屬性后,可以實(shí)現(xiàn)翻轉(zhuǎn),但是發(fā)現(xiàn)只看到正面,沒(méi)有看到背面,這又是為什么呢,前面提到有一個(gè)屬性backface-visibility,這個(gè)屬性用于控制在翻轉(zhuǎn)后,元素的背面是否可見(jiàn),默認(rèn)是可見(jiàn)的,所以就會(huì)擋著背面那個(gè)元素,我們需要手動(dòng)設(shè)置元素翻轉(zhuǎn)后背面不可見(jiàn),所以需要設(shè)置:

#content ul li a > div{
     -webkit-backface-visibility: hidden;
     -moz-backface-visibility: hidden;
}

這樣設(shè)置之后,由于正面的元素在翻轉(zhuǎn)后背面不可見(jiàn),我們就可以看到背面的元素了。

但是,仔細(xì)觀察會(huì)發(fā)現(xiàn)這個(gè)翻轉(zhuǎn)似乎并不是那么立體,似乎在兩條平行線之間實(shí)現(xiàn)了翻轉(zhuǎn),所以我們需要設(shè)置一個(gè)觀察點(diǎn)距離視圖的距離,這時(shí)候就需要給父元素添加perspective屬性,這個(gè)屬性的值一般為800px ~ 1000px,這個(gè)范圍內(nèi)的值會(huì)看上去合理。所以給父元素添加:

#content ul li a{
    -webkit-perspective: 800px;
    -moz-perspective: 800px;
}

至此,就實(shí)現(xiàn)了一個(gè)翻轉(zhuǎn)卡牌的效果,但是這里需要解決一個(gè)問(wèn)題,因?yàn)?b>perspective屬性不被IE支持(Microsoft Edge支持),所以需要進(jìn)行降級(jí),我的做法是直接顯示隱藏。那么如何識(shí)別IE9+瀏覽器呢?在stackoverflow中我找到了答案:

附:CSS中識(shí)別各類IE的方法 IE6
* html .ie6{
    property:value;
}

or

html .ie6{
    _property:value;
}
IE7
*+html .ie7{
    property:value;
}

or

*:first-child+html ie7{
    property:value;
}
IE6 and IE7
@media screen9{
    ie67{property:value;}
}

or

.ie67{ *property:value;}

or

.ie67{ #property:value;}
IE6,7 and 8
@media