2017-01-27 3 views
1

現在、div内で画像タグを使用してサイトのヘッダーを表示しています。新たな機能要求が出てきました。これは、同じイメージのいくつかの異なるバージョンをさまざまな照明で保持し、ヘッダーの左側に1つのイメージを表示し、右側のイメージに柔らかく移行する必要があります。 3つ以上の画像を使用することができればさらに優れています。CSSはある画像から別の画像への勾配の遷移を許可できますか?

例は私の古い3Dレンダリングを使用しています。 1つの夕焼けの画像と1つの昼間の画像があり、それらとCSSだけを使って下の画像を作成したいとします。例を参照してさらに説明が必要ない人のために

:あなたはフィドルでそれらを使用したい場合は、元の画像は下記のアドレスで発見することができます:画像の幅はすべて800ピクセルです。最終的な結果は、800ピクセル幅のイメージでなければなりません。結果の画像の左端は画像-1、右端は画像-2、中央はフェードします。私はCSSの背景画像と線形勾配を使ってこれを可能にすると期待していますが、私の検索は奇妙に空になっています。これはCSSで可能ですか?

Gradient fade from one image to another

答えて

3

ソリューションSVGを使用することをお勧めWebKitの

によってサポートされている、あなたの問題を解決します(非常に低いサポート)マスク画像

.base { 
 
    width: 600px; 
 
    height: 400px; 
 
    position: relative; 
 
    background-image: url(https://i.stack.imgur.com/0bIJu.jpg); 
 
    background-size: cover; 
 
} 
 

 
.overlay { 
 
    width: 100%; 
 
    height: 100%; 
 
    position: absolute; 
 
    top: 0px; 
 
    left: 0px; 
 
    background-image: url(https://i.stack.imgur.com/ohVd6.jpg); 
 
    background-size: cover; 
 
    -webkit-mask-image: linear-gradient(to left, transparent, white); 
 
}
<div class="base"><div class="overlay"></div></div>

また、ブレンドモードを使用する別のソリューションです。これは現代のブラウザのほとんどでサポートされています。 (通常はEdgeを除いて)。私はホバー上にアニメーションを追加しました。

私はおそらくガンマ計算に関係する若干の問題があると信じています。結果が暗くなる場所があります。私はグラデーションをより明るくするように修正しようとしました。

.container { 
 
    width: 600px; 
 
    height: 400px; 
 
    position: relative; 
 
} 
 

 
.container div { 
 
    width: 100%; 
 
    height: 100%; 
 
    position: absolute; 
 
} 
 

 
.container:hover div { 
 
    animation: slide 6s infinite; 
 
} 
 

 
.image1 { 
 
    background-image: linear-gradient(to right, black 33%, #444 40%,#ddd 60%, white 66%), url(https://i.stack.imgur.com/0bIJu.jpg); 
 
    background-size: 300% 100%, cover; 
 
    background-position: center center, center center; 
 
    background-blend-mode: multiply; 
 
} 
 

 
.image2 { 
 
    background-image: linear-gradient(to left, black 33%, #444 40%,#ddd 60%,white 66%), url(https://i.stack.imgur.com/ohVd6.jpg); 
 
    background-size: 300% 100%, cover; 
 
    background-position: center center, center center; 
 
    background-blend-mode: multiply; 
 
    mix-blend-mode: screen; 
 
} 
 
@keyframes slide { 
 
    from { background-position: left center, center center; 
 
     } 
 
    to {background-position: right center, center center;} 
 
}
<div class="container"> 
 
    <div class="image1"> 
 
    </div> 
 
    <div class="image2"> 
 
    </div> 
 
</div>

+0

非常にクール。ありがとう! http://caniuse.com/#feat=css-masksによると、私がSVGを使用するように切り替えると、87%のブラウザがそれをサポートするように見えます。 IEは問題の子(やはり)であるようです。これは私のニーズにとっては十分かもしれません。少なくとも今のところは、最適ではないが十分である。特に高いモバイルサポートが与えられています。私の前で多くのテストをしているように見える... – Nicholas

+0

私は別のposibilityを追加しました。しかし、エッジは依然として問題になります。 – vals

+0

ありがとうございました。私はこの機能も調べました:http://caniuse.com/#search=background-blend-mode。マスクイメージよりも「完全なサポート」があるようですが、後者は必要なサポートが増えています。主な相違点は、最新のバージョンまではブレンドモードをサポートしていないAndroidであり、私はまだ3.xデバイスを使用している多くの人がいます。それで私は躊躇します。あなたの考えはどうですか? – Nicholas

0

mask-imageあなたはクロスブラウザのソリューションを持っているしたい場合しかし、それは現在だけ私はあなたが使用して代わりに

関連する問題