次の画像をCSSで作成できるかどうか誰かが知っていますか?明るい線と暗い線は同じ幅である可能性があり、同じである必要があります。また、背景全体が暗い色(この場合は濃い青)になるように、エッジが暗い色にフェードインします。
どんな助けでも大歓迎です。私のグーグルスキルはこの種の効果に何の助けも提供しませんでした、「スターバーストステッカー/バッジのようなもの」だけが見つかりました。
いいえ。残念ながら、css3で生成された画像の仕様には、円錐/角度のグラデーションが含まれていません(ただし、次のリビジョンで公開される可能性があります)。これは、cssのみを使用してこれを行う最も可能性の高い方法です。ただし、これはcss+svgを使用して行うことができます。私は実際に、私が一度行った実験からこのsvgドキュメントを置いていました:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="512px" height="512px" viewBox="-256 -256 512 512" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Burst</title>
<defs>
<g id="burst">
<g id="quad">
<path id="ray" d="M0,0 -69,-500 69,-500 z" />
<use xlink:href="#ray" transform="rotate(30)"/>
<use xlink:href="#ray" transform="rotate(60)"/>
<use xlink:href="#ray" transform="rotate(90)"/>
</g>
<use xlink:href="#quad" transform="rotate(120)"/>
<use xlink:href="#quad" transform="rotate(240)"/>
</g>
<radialGradient id="grad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
<stop offset="0%" stop-color="white" stop-opacity="0.65"/>
<stop offset="100%" stop-color="black" stop-opacity="0.65"/>
</radialGradient>
<!-- a circle mask -->
<mask id="m"><circle r="256" fill="white"/></mask>
</defs>
<!-- added a mask and scaled it to a different aspect ratio below. scale(x,y) -->
<g mask="url(#m)" transform="scale(1, 0.75)">
<use xlink:href="#burst" fill="lightslateblue"/>
<use xlink:href="#burst" fill="darkslateblue" transform="rotate(15)"/>
<circle r="360px" fill="url(#grad)" />
</g>
</svg>
それを背景画像として設定し、cssを設定しbackground-size: cover
ます。それでおしまい。これは、データURLでこの画像を使用するフィドルです。
しかし、それはいくつかの作業が必要です。
私はこれとまったく同じ質問をしましたが、純粋なCSSでこの効果が行われている例は見つかりませんでした。それで、私はそれをいじくり回すことにしました。
たくさんの実験を重ねた結果、CSSだけでなく、(比較的)移植性の高いソリューションを思いついたのです。
線形グラデーションのトリックオン::before
と::after
疑似要素を使用して、上半分と下半分だけを別々に作成することから始めました。2番目のステップ(これははるかに時間のかかるステップでした)は、2つの半分を1つの要素にマージすることでした。
作業デモ: http ://codepen.io/pestbarn/pen/aBybeK
(元のポスターは、放射状グラデーションのdivオーバーレイを使用して、上記のデモで個別に作成したビネット効果を望んでいました)
バニラCSSとSassミックスインの両方をgithub.com/pestbarn/starburst.cssで提供しました。いくつかの例は、公式デモページにあります。
これはクロスブラウザですか?
私の知る限りでは、そうです。現在のブラウザのサポートはリポジトリで確認できます。
アニメートできますか?
はい、他の要素をアニメーション化するのと同じように。ぜひお試しください。
注意点はありますか?
ああ、あります。別の色とは大幅に異なる2つの色(明るさなど)を使用すると、ギザギザのエッジが作成されます。したがって、互いに非常に似ている色を使用することをお勧めします。
また、エフェクトは疑似要素を使用して作成されるため、要素の高さと幅を明示的に設定する必要がある場合があります。
お気軽に実験してください!
CSS仕様に追加conic-gradient()
することで、そのタイプのエフェクトを対象としたCSSを使用してエフェクトを作成できるようになりました。
基本的に、次のようにグラデーションストップを設定します。
background-image: conic-gradient( circle,
black 0%, black 5%,
white 5%, white 10%,
black 10%, black 15%,
...
);
そして、これがアニメーションバージョンです:-)しかし、私のブラウザではアニメーションが少し途切れがちです。少し最適化できるかもしれません。
これはWebKitブラウザーでのみ機能することに注意してください。つまり、ChromeとSafariです。しかし正直なところ、これはユーザーの大部分をカバーしており、残りのユーザーはすぐにサポートを追加すると確信しています。
現在、「marcus erronius」の答えを拡張するには、「円錐勾配()」法よりも優れた解決策があります。repeating-conic-gradient
繰り返しグラデーションで構成される画像を作成するがあります。
div {
height: 500px;
background: repeating-conic-gradient(
hsl(0deg 0% 80% / 31%) 0deg 15deg,
hsla(0,0%,100%,0) 0deg 30deg
) #3c1c32
}
<div></div>
詳細については、W3CSS画像値を参照してください。
このプロパティは、すべてのブラウザと互換性があるわけではありません。詳細については、 caniuseを確認してください。