찾다
웹 프론트엔드CSS 튜토리얼CSS 그래디언트 앨리어싱 문제를 해결하는 방법에 대한 자세한 예입니다!

이 글에서는 그래디언트 그래픽 사용으로 인해 발생하는 앨리어싱 문제를 해결하는 방법을 소개합니다. 소위 CSS 그래디언트 앨리어싱 사라지는 기술을 알고 나면 그 방법을 살펴볼 수 있습니다~ 바랍니다. 모두에게 도움이 되세요!

CSS 그래디언트 들쭉날쭉 사라지는 기술

CSS에서 그래디언트(Gradient)는 가장 강력한 속성 중 하나입니다.

그러나 학생들은 그라디언트를 사용할 때 그라디언트 그래픽으로 인해 발생하는 앨리어싱 문제에 자주 직면합니다. [추천 학습: 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 = 물리적 픽셀 / 장치 독립 픽셀 장치 픽셀 비율은 크기 조정되지 않은 상태에서 물리적 픽셀과 장치 독립 픽셀 사이의 초기 비례 관계를 나타냅니다.

그럼 들쭉날쭉한 느낌은 왜 있는 걸까요?

기존 웹 페이지의 표현은 픽셀 단위를 기반으로 합니다. 한 색상이 다른 색상 상태로 직접 전환되는 사진의 경우 시각적 품질이 저하(정보 왜곡)될 수 있습니다. 따라서 위에서 언급한 글쓰기와 같은 일반적인 그래디언트 요소의 경우 앨리어싱(Aliasing)이 발생하는데, 이는 그래디언트를 사용하는 과정에서 매우 흔히 발생하는 골치 아픈 문제입니다.

간단한 해결책

왜곡 문제에 대한 해결책은 많습니다. 여기서 가장 간단한 방법은 직접적인 전환을 만드는 것이 아니라 아주 작은 그래디언트 전환 공간을 확보하는 것입니다.

위 코드를 간단하게 변환할 수 있습니다.

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 그래디언트 앨리어싱 문제를 해결하는 방법에 대한 자세한 예입니다!

즉시 효과가 많이 좋아진 걸 보실 수 있어요!

물론 원본 코드를 수정하고 싶지 않다면 의사 요소 레이어를 오버레이하여 달성할 수도 있습니다. 다음은 세 가지 방법의 비교 차트입니다.

<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 그래디언트 앨리어싱 문제를 해결하는 방법에 대한 자세한 예입니다!

CodePen 데모 -- 그라데이션 앨리어싱 제거

CSS 그래디언트 앨리어싱 문제를 해결하는 방법에 대한 자세한 예입니다!하이라이트!

이 방법은 선형 그라디언트, 방사형 그라디언트 및 각도 그라디언트

에 적합하며 CSS 앨리어싱을 제거하는 가장 간단한 방법입니다. 고급 앨리어싱 제거 방법

물론, 다른 고급 앨리어싱 제거 방법도 있습니다.

Bionic Lion

-

CSS Illusion | Anti-Aliasing

의 이 기사에서는 앨리어싱을 제거하는 또 다른 흥미로운 방법도 소개합니다. 다음 내용은 기사의 일부를 발췌한 것입니다.

우리는 edge-aliased edge->reconstruct aliased edge 방법을 구축할 수 있습니다. 우리가 해야 할 일은 들쭉날쭉한 느낌을 덜 강렬하게 만들기 위해 들쭉날쭉한 곳에 또 다른 콘텐츠 레이어를 겹쳐 놓는 것입니다. 이를 POAA(Pixel-Offset Anti-Aliasing)라고 합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Google 글꼴을 태그하고 Goofonts.com을 작성한 방법Google 글꼴을 태그하고 Goofonts.com을 작성한 방법Apr 12, 2025 pm 12:02 PM

Goofonts는 개발자 부인과 디자이너 남편이 서명 한 사이드 프로젝트로, 둘 다 타이포그래피의 큰 팬입니다. 우리는 Google에 태그를 지정했습니다

시대를 초월한 웹 개발 기사시대를 초월한 웹 개발 기사Apr 12, 2025 am 11:44 AM

Pavithra Kodmad

섹션 요소와의 거래섹션 요소와의 거래Apr 12, 2025 am 11:39 AM

두 기사가 정확히 같은 날에 출판되었습니다.

JavaScript API 상태로 GraphQL 쿼리를 연습하십시오JavaScript API 상태로 GraphQL 쿼리를 연습하십시오Apr 12, 2025 am 11:33 AM

GraphQL API를 구축하는 방법을 배우는 것은 매우 어려울 수 있습니다. 그러나 10 분 안에 GraphQL API를 사용하는 방법을 배울 수 있습니다! 그리고 그것은 완벽하게 얻었습니다

구성 요소 수준 CMS구성 요소 수준 CMSApr 12, 2025 am 11:09 AM

구성 요소가 데이터를 쿼리하는 환경에 거주하면 근처에 사는 경우 시각적 구성 요소와

오프셋 경로로 원에 유형을 설정하십시오오프셋 경로로 원에 유형을 설정하십시오Apr 12, 2025 am 11:00 AM

여기 Yuanchuan의 합법적 인 CSS 속임수입니다. 이 CSS 속성 오프셋 경로가 있습니다. 옛날 옛적에, 그것은 모션 경로라고 불렸다가 이름이 바뀌 었습니다. 나

CSS에서 '리버 트'는 무엇을합니까?CSS에서 '리버 트'는 무엇을합니까?Apr 12, 2025 am 10:59 AM

Miriam Suzanne 은이 주제에 대한 Mozilla 개발자 비디오에서 설명합니다.

현대 애호가현대 애호가Apr 12, 2025 am 10:58 AM

나는 이런 것들을 좋아한다.

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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.