使用CSS mask 實現圖片的斜線拼接

jopen 8年前發布 | 21K 次閱讀 CSS

每次必說題外話

話說貌似好久沒有寫技術文章了,自從娃娃出來后,很少能有時間做技術研究,思考的時間也不足。不過有得必有失,世上事也就醬紫了。但是作為一個前端攻城師,不寫代碼,不研究技術,是會被后浪拍死在沙灘上的。

碰巧前段時間碰到個CSS問題,一直很喜歡CSS的,能CSS解決的問題絕對不用JS,于是就抽時間整整看。

什么是斜線拼接

回到本文主題上,”斜線拼接“是我自創的詞語,因為我也不知道怎么描述這個需求,o(╯□╰)o,實際的效果是下面所示:

使用CSS mask 實現圖片的斜線拼接

眼力好的筒子應該就能發現,上面這張圖是兩個帥鍋拼接在一起的,看中間的斜線。

但是呢,剛接到這個需求的時候,開發是抓狂的——第一反應就是用canvas畫圖,這得多累啊,只是要顯示張圖片而已,竟然還要動用一坨JS,O__O "…

不過依稀記得,CSS 貌似有個遮罩的特性,可以實現圖片的部分顯示的效果的。

CSS mask & linear gradient

要實現這個特性,就需要用到CSS遮罩和線性漸變。 至于這兩個是什么東西,我就不班門弄斧的介紹了,畢竟這兩個屬性出生也挺久了的,不了解的筒子可以看這兩篇文章 CSS遮罩——如何在CSS中使用遮罩深入理解css3-gradient斜向線性漸變

先看下實際的效果

使用CSS mask 實現圖片的斜線拼接

大家請看妹子中間(注意表看錯了,是兩個妹子的中間),有一條比較明顯的分界線。多說無益,我知道你們想看demo, 用力戳這里>>

第一步,顯示兩張圖

OK,先看代碼,然后我再來解釋。

    <divclass="img-container">
        <divclass="img-left"></div>
        <divclass="img-right"></div>
    </div>

然后是CSS

    .img-container{
        position: relative;
        width: 200px;
        height: 200px;
        border: 5px solid #40BCFF;
    }
 
    .img-left{
        background: url(img/left.jpg);
        background-size: cover;
        width: 100%;
        height: 100px;
    }
 
    .img-right{
        background: url(img/right.jpg);
        background-size: cover;
        width: 100%;
        height: 100px;
    }

OK,看下效果

使用CSS mask 實現圖片的斜線拼接

小明:尼瑪,這不是坑爹么,這么簡單誰不會?

小朋友,別急,我們兩個主角還沒上了。

畫個斜線

為了實現斜線拼接,你總得有個斜線吧?把img-right的背景換成一個帶有“斜線”的圖,這個就不用“真”圖片啦,CSS漸變就能完成,如下:

    .img-right{
        background: -webkit-linear-gradient(lefttop, blue 50%, white 50%);
    }

使用CSS mask 實現圖片的斜線拼接

好,把背景換成真實的美女,漸變圖作為mask

.img-right{
    background: url(img/right.jpg);
    background-size: cover;
    -webkit-mask-image: -webkit-linear-gradient(lefttop, blue 50%, white 50%);
}

But,如果你這么做了,會發現看到的是完整的圖,并沒有被遮蓋,跟下圖一樣。

使用CSS mask 實現圖片的斜線拼接

這是因為css mask的原理是,它只會把遮罩圖里透明像素所對應的原圖部分進行隱藏,而我們的漸變圖是完全不透明的(我們是藍白色相間的),所以沒有遮罩效果。那么把藍色改成透明試試。

.img-right{
    background: url(img/right.jpg);
    background-size: cover;
    -webkit-mask-image: -webkit-linear-gradient(lefttop, transparent 50%, white 50%);
}

使用CSS mask 實現圖片的斜線拼接

當當當~~美女只顯示一半啦!?(^?^*)

層疊

最后,把第二張圖層在第一章上面,由于第二張圖左邊一半都是透明的,背景里的美女也能直接透過來啦。

.img-right{
    position: absolute;
    left: 0;
    top: 0; 
}

使用CSS mask 實現圖片的斜線拼接

看下最終img-right所需要的樣式代碼

.img-right{
        position: absolute;
        left: 0;
        top: 0;
        background: url(img/right.jpg);
        background-size: cover;
        -webkit-mask-image: -webkit-linear-gradient(lefttop, transparent 50%, white 50%);
        width: 100%;
        height: 100%;
}

怎么樣,很簡單是吧?

CSS3有很多新鮮(其實這個不新鮮了~)的特性可以實現很多有趣的應用,如果你有其他方案,歡迎瀏覽討論,O(∩_∩)O謝謝閱讀!

來自: http://www.alloyteam.com/2016/02/use-the-css-of-the-mask-to-achieve-a-picture-diagonal-mosaic/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!