最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

純css實現(xiàn)窗戶玻璃雨滴逼真效果

 更新時間:2015年08月23日 16:23:02   投稿:mrr  
css實現(xiàn)窗戶上水珠效果,效果特別逼真,窗外的雨淅淅瀝瀝飄打在玻璃上,看起來很像模糊的窗外,斜滴的雨露,接下來給大家一起來用CSS技術(shù)實現(xiàn)這樣一幅畫面,下面給大家分享使用純css實現(xiàn)窗戶玻璃雨滴逼真效果,感興趣的朋友快樂圍觀吧

這里僅是用CSS技術(shù)來演示這樣的一個場景,可能并不太實用。然而這是一個探索CSS新功能的最佳機會??梢宰屇銍L試使用一些新特性和新工具。并且逐漸將在工作中實踐。在制作窗口雨滴效果,將使用到HAML和Sass。

案例效果

查看演示 

源碼下載

看到上面的效果是不是有點像人站室內(nèi)看窗外雨中的夜景,窗戶上雨滴的效果是那么的真實,窗外的夜景卻又是那么的模糊。咱們不在詩意化了,我想大家更為關(guān)注的是用什么樣的技術(shù)來實現(xiàn)這樣的一個效果。

預(yù)處理器

在這個示例中,使用了HAML和Sass來替代我們熟悉的HTML和CSS。主要是為了制作雨滴需要上百個<div>元素,另外需要對上百個<div>寫樣式,畢竟每個雨滴都長得不一致嘛。使用預(yù)處理器除了可以幫助我們減少工作量之外,還可以使用預(yù)處理器中的循環(huán)、變量等。最主要的是可以使用隨機函數(shù)產(chǎn)生的隨機值,讓我們不需要單獨處理上百個雨滴。

有關(guān)于HAML和Sass的語法可以各自到其官網(wǎng)上查閱。如果你自己本地電腦不具備這樣的開發(fā)環(huán)境,可以直接在Codepen創(chuàng)建DEMO,并且選擇對應(yīng)的預(yù)處理器。在HTML和CSS的配置中選擇對應(yīng)的預(yù)處理器。比如在HTML設(shè)置中選擇HAML,在CSS設(shè)置中選擇SCSS。

有關(guān)于Sass更多的中文教程,可以點擊這里閱讀。

結(jié)構(gòu)

制作窗戶雨滴的效果,其結(jié)構(gòu)并不太復(fù)雜。主要分兩個層次,其中是窗戶,而另個是雨滴。在案例中使用.window來表示窗戶,在.raindrops容器中放置了上面?zhèn)€雨滴.雨滴是通過.border和.drops來制作。并且將窗戶.window和雨滴.raindrops都放置在容器.

container中:

.container
 .window
 .raindrops
 .borders
  - (1..120).each do
  .border
 .drops
  - (1..120).each do
  .raindrop

編譯出來的結(jié)構(gòu):

<div class="container">
 <div class="window"></div>
 <div class="raindrops">
 <div class="borders">
  <div class="border"></div>
  <!-- 此處省略 118個border -->
  <div class="border"></div>
 </div>
 <div class="drops">
  <div class="raindrop"></div>
  <!-- 此處省略 118個raindrop -->
  <div class="raindrop"></div>
 </div>
 </div>
</div>

樣式

樣式分為三個層次:

模糊的窗外夜景(理解成窗戶的效果也可以)
雨滴效果
雨滴下滑動畫效果
接下來簡單了解這些效果是怎么實現(xiàn)的,又使用了哪些CSS新特性。

設(shè)置變量

整個效果都是使用Sass來編寫,如果你從未了解或接觸過Sass,建議您先對其做一個簡單的了解。這樣更有助于你快速理解案例效果制作。

窗外的夜景找了一張華燈初上的圖片,而且讓窗戶占據(jù)全屏,在這里首先聲明三個變量:

$image: "http://www.w3cplus.com/sites/default/files/blogs/2015/1506/huadenchushang.jpg";
$width:100vw;
$height:100vh;

初此之外,需要設(shè)置雨滴變量:

$raindrops:120;

特別需要注意,雨滴的變量值最好和HTML中的雨滴結(jié)構(gòu)相匹配。

讓窗戶占據(jù)全屏

首先要做的是讓窗戶占據(jù)全屏。其實就是讓.window全屏顯示。至于如何實現(xiàn)全屏效果,這也不是什么難的事情。我想懂點CSS的同學(xué),分分鐘就能搞定。不過這里采用的是CSS3的新方法,采用viewport單位來實現(xiàn)全屏效果:

.container{
 position:relative;
 width:$width;
 height:$height;
 overflow:hidden;
}
.window{
 position:absolute;
 width:$width;
 height:$height;
 background:url($image);
 background-size:cover;
 background-position:50%;
}

使用了兩個關(guān)鍵知識點:

使用viewport單位vw和vh,讓容器.container和.window和視窗窗口一樣大。(有關(guān)于Viewport單位相關(guān)介紹,這里有做詳細介紹)
使用CSS3的background-size屬性,讓背景圖片滿屏顯示。

模糊效果(毛玻璃)

我們要的效果不僅僅是背景圖全屏這么簡單,看上去圖片是模糊的效果?;蛟S有同學(xué)會說,使用制作軟件整一張模糊的背影圖片,也就分分鐘的事情。如果你還是使用這樣的方法來處理,說明你已經(jīng)Out了。

CSS3中有一個filter屬性,將其設(shè)置blur(),效果就出來了。

.window{
 ...
 filter:blur(10px);
}

 

現(xiàn)實生活中的雨露

在我們繼續(xù)討論之前,讓我們看看現(xiàn)實生活中雨滴在窗戶上的效果:

 

圖片來自:Wikipedia

由于折射,雨滴翻轉(zhuǎn)圖像。另外,雨滴形狀或多或少有些類似半球體,而且綜們看起來有黑色邊框。

雨滴

基于我們看到的雨滴效果,讓我們來嘗試制作一個單獨的雨滴效果。

HAML

.container
 .window
 .raindrop

SCSS

$drop-width:15px;
$drop-stretch:1.1;
$drop-height:$drop-width*$drop-stretch;
.raindrop{
 position:absolute;
 top:$height/2;
 left:$width/2;
 width:$drop-width;
 height:$drop-height;
 border-radius:100%;
 background-image:url($image);
 background-size:$width*0.05 $height*0.05;
 transform:rotate(180deg);
}

這是很簡單的,我做就是使用div.raindrop畫了一個橢圓。并且用了當初的背景圖進行了填補,并做了一個倒轉(zhuǎn)的效果。

 

現(xiàn)在,我們要添加一個小邊框,讓雨滴看起來更像雨點(看起來有立體效果)。

HAML

.container
 .window
 .border
 .raindrop

SCSS

.border{
 position:absolute;
 top:$height/2;
 left:$width/2;
 margin-left:2px; 
 margin-top:1px;
 width:$drop-width - 4;
 height:$drop-height;
 border-radius:100%;
 box-shadow:0 0 0 2px rgba(0,0,0,0.6);
}

 

請注意,我們不只是添加了一個邊框,我們還對邊框進行了擠壓,所以看起來雨滴更自然一些。

雨滴看上去OK了,這個時候我們可以添加數(shù)以百計的雨滴:

HAML

.container
 .window
 .raindrops
 .borders
  - (1..120).each do
  .border
 .drops
  - (1..120).each do
  .raindrop

我們做了120個雨滴。

接下來使用Sass的循環(huán)給每個雨滴寫樣式:

@for $i from 1 through $raindrops{
 $x:random();
 $y:random();
 $drop-width:5px+random(11);
 $drop-stretch:0.7+(random()*0.5);
 $drop-height:$drop-width*$drop-stretch;
 .raindrop:nth-child(#{$i}){
  left:$x * $width;
  top:$y * $height;
  width:$drop-width;
  height:$drop-height;
  background-position:percentage($x) percentage($y);
 }
 .border:nth-child(#{$i}){
  left:$x * $width;
  top:$y * $height;
  width:$drop-width - 4;
  height:$drop-height;
 }
}

這里采用了Sass的@for循環(huán)對每個雨滴做樣式處理,并且使用隨機函數(shù)random()產(chǎn)生隨機值,讓每個雨滴的大小,擠壓都不一致。同時還使用percentage()函數(shù),讓雨滴的背景圖采用不同的位置。

 

上面看到的效果都是靜態(tài)的,為了讓它更具下雨的效果。雨滴滴下的效果,可以使用CSS3的animation來制作動畫效果。

@keyframes falling {
 from {

 }
 to {
 transform: translateY(500px);
 }
}

定義好falling動畫之后,只需要在雨滴上調(diào)用:

@for $i from 1 through $raindrops{
 $x:random();
 $y:random();
 $drop-width:5px+random(11);
 $drop-stretch:0.7+(random()*0.5);
 $drop-delay: (random()*2.5) + 1;
 $drop-height:$drop-width*$drop-stretch;
 .raindrop:nth-child(#{$i}){
  left:$x * $width;
  top:$y * $height;
  width:$drop-width;
  height:$drop-height;
 background-position:percentage($x) percentage($y);
 animation: #{$drop-delay}s falling 0.3s ease-in infinite;
 }
 .border:nth-child(#{$i}){
  left:$x * $width;
  top:$y * $height;
  width:$drop-width - 4;
  height:$drop-height;
 animation: #{$drop-delay}s falling 0.3s ease-in infinite;
 }
}

到了這一步,你也就能看到文章開頭顯示的雨滴窗戶的效果了。是不是感覺很爽呀。

總結(jié)

文章一步一步演示了如何使用CSS新特性制作一個華燈初上,雨滴窗戶的效果。整個實現(xiàn)過程采用了預(yù)處理器來編寫代碼。從整個過程中你可以很明顯的感知,如果沒有HAML和Sass這樣的預(yù)處理器,你要為數(shù)以百計的雨滴寫樣式效果,那絕對是一件非常苦逼的事情。而使用之后,采用他們的功能特性,配合CSS3的一些新特性就能很輕松的完成。

瀏覽這個效果建議您使用Chrome瀏覽器瀏覽,因為這里使用了CSS3一些新特性,大家應(yīng)該都懂的。千萬別問我IE6瀏覽器怎么破,我也破不了。

純css實現(xiàn)窗戶玻璃雨滴逼真效果,內(nèi)容到此為止,希望大家喜歡。

相關(guān)文章

  • js 立即調(diào)用的函數(shù)表達式如何寫

    js 立即調(diào)用的函數(shù)表達式如何寫

    如果不需要顯示調(diào)用函數(shù), 讓這個函數(shù)在定義的時候就執(zhí)行的話, 該如何寫才可以呢,下面為大家介紹下具體的實現(xiàn)步驟,喜歡的朋友可以了解下
    2014-01-01
  • JavaScript下申明對象的幾種方法小結(jié)

    JavaScript下申明對象的幾種方法小結(jié)

    在JavaScript中可以用下面的幾種方法申明對象:(從"Truly"的文章中學(xué)到)
    2008-10-10
  • 微信小程序開發(fā)之組件設(shè)計規(guī)范

    微信小程序開發(fā)之組件設(shè)計規(guī)范

    這篇文章主要給大家介紹了關(guān)于微信小程序開發(fā)之組件設(shè)計規(guī)范的相關(guān)資料,對剛?cè)腴T學(xué)習(xí)微信小程序的同學(xué)們還是挺有幫助的,需要的朋友可以參考下
    2021-05-05
  • 微信小程序url傳參寫變量的方法

    微信小程序url傳參寫變量的方法

    這篇文章主要介紹了微信小程序url傳參寫變量的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • JavaScript語句錯誤throw、try及catch實例解析

    JavaScript語句錯誤throw、try及catch實例解析

    這篇文章主要介紹了JavaScript語句錯誤throw、try及catch實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 使用layui實現(xiàn)樹形結(jié)構(gòu)的方法

    使用layui實現(xiàn)樹形結(jié)構(gòu)的方法

    今天小編就為大家分享一篇使用layui實現(xiàn)樹形結(jié)構(gòu)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 淺談用Webpack路徑壓縮圖片上傳尺寸獲取的問題

    淺談用Webpack路徑壓縮圖片上傳尺寸獲取的問題

    下面小編就為大家分享一篇淺談用Webpack路徑壓縮圖片上傳尺寸獲取的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Summernote實現(xiàn)圖片上傳功能的簡單方法

    Summernote實現(xiàn)圖片上傳功能的簡單方法

    下面小編就為大家?guī)硪黄猄ummernote實現(xiàn)圖片上傳功能的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript中使用sencha gridpanel 編輯單元格、改變單元格顏色

    JavaScript中使用sencha gridpanel 編輯單元格、改變單元格顏色

    ExtJS中的表格功能非常強大,包括了排序、緩存、拖動、隱藏某一列、自動顯示行號、列匯總、單元格編輯等實用功能,通過本篇文章給大家介紹JavaScript中使用sencha gridpanel 編輯單元、改變單元格顏色,感興趣的朋友一起學(xué)習(xí)
    2015-11-11
  • JavaScript中常見的繼承方式總結(jié)

    JavaScript中常見的繼承方式總結(jié)

    這篇文章主要和大家詳細介紹了JavaScript中常見的幾種繼承方式,文中的示例代碼講解詳細,對我們學(xué)習(xí)JavaScript有一定幫助,需要的小伙伴可以參考下面文章詳細內(nèi)容
    2022-11-11

最新評論

来安县| 伊通| 夏河县| 乐清市| 古交市| 阳信县| 汽车| 兴隆县| 磐石市| 稻城县| 麦盖提县| 新化县| 永德县| 千阳县| 安塞县| 久治县| 昌吉市| 临夏市| 改则县| 曲松县| 云龙县| 海丰县| 胶南市| 庆安县| 霍州市| 巴楚县| 莱阳市| 富裕县| 图片| 玉山县| 兴安盟| 宜川县| 辽宁省| 德昌县| 南丰县| 建平县| 论坛| 华蓥市| 二连浩特市| 金平| 青川县|