検索
ホームページウェブフロントエンドCSSチュートリアルCSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

この記事では、グラデーション グラフィックを使用することによって発生するエイリアシングの問題を解決する方法を紹介します。いわゆる CSS のグラデーション エイリアシングを消すテクニックは、一度知ってしまえば簡単に実行できます。その方法を見てみましょう~願っています誰にとっても役立ちます。

#CSS グラデーション鋸歯状消滅テクニック

CSS では、グラデーション (Gradient) は最も強力なプロパティの 1 つです。

しかし、学生は、グラデーションを使用するときに、グラデーション グラフィックスによって引き起こされるエイリアシングの問題によく遭遇します。 [推奨学習: css ビデオ チュートリアル ]

グラデーション エイリアスとは何ですか?

それでは、グラデーション グラフィックによって生成されるギザギザのエッジとは何でしょうか?

簡単なデモ:

<div></div>
div {
    width: 500px;
    height: 100px;
    background: linear-gradient(37deg), #000 50%, #f00 50%, #f00 0);
}

効果は次のとおりです:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

実際、ギザギザの感触はすでに非常に優れています。当然のことです。続けましょう。ズームインすると、内部は実際には次のようになります:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

あるいはこれかもしれません:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

興味深いことに、エイリアシング現象は DPR が 1 の画面で特に顕著ですが、一部の高解像度画面 (dpr > 1) では、その感覚はそれほど明白ではありません。

DPR (デバイス ピクセル比) はデバイス ピクセル比です。DPR = 物理ピクセル / デバイス独立ピクセルです。デバイス ピクセル比は、スケーリングされていない状態での物理ピクセルとデバイス独立ピクセルの間の初期の比例関係を表します。

それでは、なぜギザギザ感があるのでしょうか?

従来の Web ページのプレゼンテーションはピクセル単位に基づいているため、ある色が別の色の状態に直接遷移する画像では、視覚的な品質の低下 (情報の歪み) が発生しやすくなります。したがって、上記の書き込みなどの通常のグラデーション要素の場合、エイリアシングが発生します。これは、グラデーションを使用するプロセスにおいて非常に一般的な厄介な問題です。

簡単な解決策

歪みの問題には多くの解決策があります。ここでの最も簡単な方法は、直接遷移を行うのではなく、非常に小さな勾配遷移スペースを確保することです。

上記のコードを簡単に変換できます:

div {
    width: 500px;
    height: 100px;
  - background: linear-gradient(37deg), #000 50%, #f00 50%, #f00);
  + background: linear-gradient(37deg), #000 49.5%, #f00 50.5%, #f00);
}

変更を注意深く見てください。50% --> 50% の直接遷移から予約された 1% に変更されました。

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

効果が大幅に向上していることがすぐにわかります。

もちろん、元のコードを変更したくない場合は、疑似要素のレイヤーをオーバーレイすることによっても実現できます。ここに 3 つの方法の比較表を示します:

<div></div>
<div class="gradient"></div>
<div class="pesudo"></div>
:root {
    --deg: 37deg;
    --c1: #000;
    --c2: #f00;
    --line-width: 0.5px;
}
div {
    margin: auto;
    width: 500px;
    height: 100px;
    background: linear-gradient(
        var(--deg),
        var(--c1) 50%,
        var(--c2) 50%,
        var(--c2) 0
    );
}
// 方法一:
.gradient {
    background: linear-gradient(
        var(--deg),
        var(--c1),
        var(--c1) calc(50% - var(--line-width)),
        var(--c2) calc(50% + var(--line-width)),
        var(--c2) 0
    );
}
// 方法二:
.pesudo {
    position: relative;

    &::before {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: linear-gradient(
            var(--deg),
            transparent,
            transparent calc(50% - var(--line-width)),
            var(--c1) calc(50% - var(--line-width)),
            var(--c2) calc(50% + var(--line-width)),
            transparent calc(50% + var(--line-width)),
            transparent
        );
    }
}

疑似要素の重ね合わせは、エイリアシングが発生する場所で滑らかな遷移を実現し、それをカバーすることを意味します:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

#その効果は次のとおりです:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

CodePen デモ -- グラデーション エイリアシングの除去

要点を強調します。

この方法は、線形グラデーション、放射状グラデーション、および角度グラデーションに適しています。 これは、CSS エイリアシングを除去する最も簡単な方法です。

より高度なエイリアシング除去方法

もちろん、他のより高度なエイリアシング除去方法もあります。

この

Bionic Lion -- CSS Illusion | Anti-Aliasing の記事では、エイリアシングを除去する別の興味深い方法も紹介されています。以下の内容は記事より一部抜粋したものです。

エッジのギザギザエッジ->ギザギザのエッジを再構築

アンチエイリアシング方法を確立できます。 私たちがしなければならないのは、ギザギザの領域にコンテンツの別のレイヤーを重ねて、ギザギザ感を和らげることです。これはピクセル オフセット アンチエイリアス (POAA) と呼ばれます。

Implementing FXAA这篇博客中,解释了 FXAA 具体是如何运作的。对于一个已经被找到的图形边缘,经过 FXAA 处理后会变成这样,见下两幅图:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

FXAA(Fast Approximate Anti-Aliasing),快速近似抗锯齿,它找到画面中所有图形的边缘并进行平滑处理。

我们可以轻易找到找到渐变的边缘地方,就是那些渐变的颜色改变的地方。有了边缘信息后,接着就要重建边缘。重建边缘也许可以再拆分,分为以下几个步骤:

  • 需要通过某种方法得到透明度的点
  • 这些点需要能够组成线段
  • 线段完全吻合我们的 Gradient
  • 使线段覆盖在 Gradient 的上一层以应用我们的修改

这就是大体思路,我们并没有参与浏览器的渲染,而是通过像 FXAA 一样的后处理的方法。在已渲染的图像上做文章。

比如说,我们有这样一张图:

.circle-con {
    $c1: #cd3f4f;
    $c2: #e6a964;
    position: relative;
    height: 300px;
    background-image: repeating-radial-gradient(
        circle at 0% 50%, 
        $c1 0, 
        $c2 50px
    );
}

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

边缘信息如下:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

我们要做的,就是在它的边缘处,利用渐变再生成一段渐变,通过准确叠加,消除渐变!原理图如下:

CSS グラデーション エイリアシングの問題を解決する方法の詳細な例!

原理可行,但是实操起来非常之复杂,计算量会比较大。感兴趣的可以拿这段代码尝试一下:

.repeat-con {
    --c1: #cd3f4f;
    --c2: #e6a964;
    --c3: #5996cc;
    position: relative;
    height: 300px;
    background-image: repeating-linear-gradient(
        var(--deg),
        var(--c1),
        var(--c1) 10px,
        var(--c2) 10px,
        var(--c2) 40px,
        var(--c1) 40px,
        var(--c1) 50px,
        var(--c3) 50px,
        var(--c3) 80px
    );

    &.antialiasing {
        &:after {
            --offsetX: 0.4px;
            --offsetY: -0.1px;
            --dark-alpha: 0.3;
            --light-alpha: 0.6;
            --line-width: 0.6px;
            content: &#39;&#39;;
            position: absolute;
            top: var(--offsetY);
            left: var(--offsetX);
            width: 100%;
            height: 100%;
            opacity: 0.5;
            background-image: repeating-linear-gradient(
                var(--deg),
                var(--c3),
                transparent calc(0px + var(--line-width)),
                transparent calc(10px - var(--line-width)),
                var(--c2) 10px,
                var(--c1) 10px,
                transparent calc(10px + var(--line-width)),
                transparent calc(40px - var(--line-width)),
                var(--c1) 40px,
                var(--c2) 40px,
                transparent calc(40px + var(--line-width)),
                transparent calc(50px - var(--line-width)),
                var(--c3) 50px,
                var(--c1) 50px,
                transparent calc(50px + var(--line-width)),
                transparent calc(80px - var(--line-width)),
                var(--c1) 80px
            );
        }
    }
}

最后

简单总结一下,本文介绍了几种 CSS 中可行的消除渐变锯齿的方法。

好了,本文到此结束,希望本文对你有所帮助 :)

以上がCSS グラデーション エイリアシングの問題を解決する方法の詳細な例!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
非常に多くの色のリンク非常に多くの色のリンクApr 13, 2025 am 11:36 AM

最近の色に関するツール、記事、リソースの実行がありました。あなたの楽しみのためにここにそれらを丸くすることで、私がいくつかのタブを閉じてもらいましょう。

FlexBoxでの自動マージンの仕組みFlexBoxでの自動マージンの仕組みApr 13, 2025 am 11:35 AM

ロビンは以前にこれをカバーしたことがありますが、私は過去数週間でそれについての混乱を聞いて、他の人がそれを説明することに刺されたのを見ました、そして私は望んでいました

動く虹色の下線動く虹色の下線Apr 13, 2025 am 11:27 AM

サンドイッチサイトのデザインが大好きです。多くの美しい特徴の中には、これらの見出しがあり、レインボーの下線が下線を描いて、スクロールするときに動きます。そうではありません

新年、新しい仕事?グリッド駆動の履歴書を作成しましょう!新年、新しい仕事?グリッド駆動の履歴書を作成しましょう!Apr 13, 2025 am 11:26 AM

多くの人気のある履歴書設計は、グリッド形状にセクションを配置することにより、利用可能なページスペースを最大限に活用しています。 CSSグリッドを使用して、レイアウトを作成しましょう

リロードしすぎるという習慣からユーザーを分解する1つの方法リロードしすぎるという習慣からユーザーを分解する1つの方法Apr 13, 2025 am 11:25 AM

ページのリロードは何かです。ページが反応しないと思われるとき、または新しいコンテンツが利用可能であると信じるときにページを更新することもあります。時々私たちはただ怒っています

Reactを使用したドメイン駆動型のデザインReactを使用したドメイン駆動型のデザインApr 13, 2025 am 11:22 AM

Reactの世界でフロントエンドアプリケーションを整理する方法に関するガイダンスはほとんどありません。 (「正しいと感じる」までファイルを移動するだけです笑)。真実

非アクティブユーザーの検出非アクティブユーザーの検出Apr 13, 2025 am 11:08 AM

ほとんどの場合、ユーザーがアプリケーションに積極的に関与しているのか、一時的に非アクティブであるかを本当に気にしません。非アクティブ、意味、おそらく彼ら

Wufoo ZapierWufoo ZapierApr 13, 2025 am 11:02 AM

Wufooは常に統合に優れています。キャンペーンモニター、MailChimp、TypeKitなどの特定のアプリと統合されていますが、

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター