찾다
웹 프론트엔드CSS 튜토리얼CSS 전경 및 배경 자동 색상 일치 기술 소개(코드 예)


이 기사의 내용은 CSS 전경 및 배경 자동 색상 일치 기술에 관한 것으로, 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 색상 매칭 효과 미리보기

다음 GIF는 버튼의 배경색이 점차 희미해지면 텍스트 색상도 원래 흰색에서 검정색으로 변경되고 색상 변환도 순수하게 표시되는 것을 보여줍니다. CSS로 구현되었습니다.

CSS 전경 및 배경 자동 색상 일치 기술 소개(코드 예)

자동 색상 매칭 버튼 다이어그램

R, G, B의 해당 슬라이더를 드래그하면 배경 색상에 따라 버튼 텍스트 색상과 테두리 색상이 자동으로 변경되는 것을 확인할 수 있습니다. 구체적인 성능은 다음과 같습니다.

어두운 배경에서 텍스트는 흰색이며 테두리가 없습니다.

밝은 배경에서는 텍스트가 검은색이고 테두리가 어두워져 주변 환경과 쉽게 구분됩니다.

이 스마트 매칭은 주로 CSS3 calc() 계산과 CSS3 기본 var 변수를 사용하여 순수 CSS로 구현됩니다.

2. 색상 일치 코드 표시

HTML 코드는 다음과 같이 매우 간단합니다.

<button class="btn">我是按钮</button>

초점과 난이도는 CSS 부분에 있습니다.

:root {
/* 定义RGB变量 */
--red: 44;
--green: 135;
--blue: 255;
/* 文字颜色变色的临界值,建议0.5~0.6 */
--threshold: 0.5;
/* 深色边框出现的临界值,范围0~1,推荐0.8+*/
--border-threshold: 0.8;
}
.btn {
/* 按钮背景色就是基本背景色 */
background: rgb(var(--red), var(--green), var(--blue));
/**
* 使用sRGB Luma方法计算灰度(可以看成亮度)
* 算法为:
* lightness = (red * 0.2126 + green * 0.7152 + blue * 0.0722) / 255
*/
--r: calc(var(--red) * 0.2126);
--g: calc(var(--green) * 0.7152);
--b: calc(var(--blue) * 0.0722);
--sum: calc(var(--r) + var(--g) + var(--b));
--lightness: calc(var(--sum) / 255);
/* 设置颜色 */
color: hsl(0, 0%, calc((var(--lightness) - var(--threshold)) * -999999%));
/* 确定边框透明度 */
--border-alpha: calc((var(--lightness) - var(--border-threshold)) * 100);
/* 设置边框相关样式 */
border: .2em solid;
border-color: rgba(calc(var(--red) - 50), calc(var(--green) - 50), calc(var(--blue) - 50), var(--border-alpha));
}

얼핏 보면 천둥소리를 듣는 오리처럼 보입니다. 이해가 안 되지만 사실 복잡하지는 않으니 양해해 주시기 바랍니다. 구현 원리를 분석해 보세요.

3. 전경과 배경의 자동 색상 일치 원리

1. CSS 속성 값 범위 오버플로 경계 렌더링 기능

CSS에는 CSS 속성 값이 정상 범위를 초과할 때, 형식이 정확하면 렌더링되며 렌더링된 값은 법적 경계 값입니다.

밤 두 개 인용:

불투명도 투명도 속성 값의 법적 범위는 0-1입니다. 그러나 음수 또는 최대값을 설정하면 브라우저도 이를 구문 분석할 수 있지만 이는 0 또는 1입니다.

.example {
opacity: -2;    /* 解析为 0, 完全透明 */
opacity: -1;    /* 解析为 0, 完全透明 */
opacity: 2;     /* 解析为 1, 完全不透明 */
opacity: 100;   /* 解析为 1, 完全不透明 */
}

HSL, S, L과 같은 색상 값의 범위는 0%에서 100%입니다. 그러나 음수 또는 최대값을 설정하면 브라우저에서도 이를 구문 분석할 수 있지만 0% 또는 100%입니다. 100% 다음과 같습니다.

.example {
color: hsl(0, 0%, -100%);    /* 解析为 hsl(0, 0%, 0%), 黑色 */
color: hsl(0, 0%, 200%);     /* 解析为 hsl(0, 0%, 100%), 白色 */
}

이 글의 컬러 매칭 기술은 이 경계 렌더링 기능을 최대한 활용합니다.

2. 복잡한 계산을 구현하기 위해 var 변수를 calc에 전달합니다

CSS 코드를 위에서 아래로 하나씩 분석해 보겠습니다.

먼저 루트 선택기에서 여러 전역 CSS 변수(의미상 전역)를 정의합니다.

:root {
--red: 44;
--green: 135;
--blue: 255;
--threshold: 0.5;
--border-threshold: 0.8;
}

그 중:

–threshold

이것은 색상 변색의 중요한 값으로, 현재 RGB 색상 값 밝기 대비와 비교하는 데 사용됩니다. .

–border-threshold

테두리 색상 투명도의 중요한 값이며, 현재 RGB 색상 값과의 밝기 비교이기도 합니다.

그럼. btn{} 내부 CSS 코드:

background: rgb(var(--red), var(--green), var(--blue));

이해하기 쉽습니다. 기본 RGB 색상 값을 배경색으로 사용합니다.

--r: calc(var(--red) * 0.2126);
--g: calc(var(--green) * 0.7152);
--b: calc(var(--blue) * 0.0722);
--sum: calc(var(--r) + var(--g) + var(--b));
--lightness: calc(var(--sum) / 255);

여기에는 5개의 CSS 변수가 5줄 있습니다. 실제로 필요한 것은 마지막 변수인 밝기입니다. 이는 현재 배경색의 밝기를 계산하는 것입니다. 사용되는 것은 sRGB Luma 그레이스케일 알고리즘입니다. ① 왜 5개의 라인이 필요한가요? 계산 공식은 다음과 같기 때문입니다.

lightness = (red * 0.2126 + green * 0.7152 + blue * 0.0722) / 255

그 중 R, G, B 색상 값을 곱하는 계수는 고정되어 있으며, 그레이스케일 알고리즘마다 계수가 다릅니다. --lightness는 밝기를 나타내며, 범위는 0~1이며, 이때 두 가지 중요한 값인 --threshold 및 --border-threshold와 비교하여 텍스트 색상과 테두리 투명도를 결정할 수 있습니다. 단추.

① 여기서 그레이 스케일은 밝기로 간주할 수 있습니다. 실제로 HSL의 밝기 계산 방법은 R, G, B의 최대 색상 값과 최소 색상 값을 합한 값의 1/2이어야 합니다.

color: hsl(0, 0%, calc((var(--lightness) - var(--threshold)) * -999999%))

색상을 설정하는 CSS 코드입니다.

여기서 중국어로 번역된 계산식은 (밝기 값 – 임계 값) * 비례 계수입니다.

밝기 값은 0-1 사이를 오가고 임계값은 0.5로 고정됩니다. 따라서:

밝기 값이 0.5보다 작으면 비례 계수가 매우 크기 때문에 밝기 값에서 임계값을 뺀 값은 음수입니다. 는 음수이고 음수는 양수이므로 큰 양수를 얻게 됩니다. 경계 렌더링 원리에 따르면 100%로 렌더링되므로 색상은 흰색입니다.

밝기 값이 0.5보다 크면, 밝기 값에서 임계 값을 뺀 값은 양수입니다. 비율 계수가 매우 큰 음수이므로 경계 렌더링 원리에 따라 0%로 렌더링되므로 색상은 검은색이 됩니다.

위는 버튼 텍스트의 색상이 배경에서 검정색으로 변하는 것이며, 어두운 배경에서는 흰색이 되는 원리입니다.

--border-alpha: calc((var(--lightness) - var(--border-threshold)) * 100);

테두리 투명성도 비슷한 원리입니다. 여기서 중국어로 번역된 계산식은 (밝기 값 – 경계 임계값) * 100입니다.

밝기 값은 0-1 사이를 오가며 테두리 임계값은 0.8로 고정됩니다. 따라서:

밝기 값이 0.8보다 작으면 밝기 값에서 테두리 임계값을 뺀 값은 CSS에서 음수 투명도입니다. 테두리 0 렌더링은 다음과 같습니다. 이때 테두리는 완전히 투명합니다.

밝기 값이 0.8보다 크면 밝기 값에서 테두리 임계값을 뺀 값이 양수이고 이때 계산된 투명도 값은 사이를 떠돌게 됩니다. 물론, 값이 1보다 크면 투명도 값은 1에 따라 렌더링됩니다. 이때 테두리는 기본적으로 완전히 불투명한 상태이며, 깊어진 테두리가 나타납니다.

border: .2em solid;
border-color: rgba(calc(var(--red) - 50), calc(var(--green) - 50), calc(var(--blue) - 50), var(--border-alpha));

테두리를 설정하세요. 스타일이며 테두리 색상은 배경 색상보다 50 단위 더 어둡습니다(음수는 0에 따라 렌더링됨). 그런 다음 투명도는 밝기의 동적 계산을 기반으로 합니다. 어두운 배경에서는 버튼 테두리 투명도가 0이고 밝은 배경에서는 투명도 범위가 0에서 1 사이로 나타나며, 베이징 색상이 밝을수록 테두리 투명도가 높아지고 테두리 색상이 어두워집니다. 컬러 매칭 기대치에 부합합니다.

相信经过上面的一番剖析,大家就会明白其实现的原理了。

改变按钮的背景色

.btn类名下的CSS代码是固定的,让我们需要改变按钮的颜色的时候,不是改。btn下的CSS,而是修改:root中的下面3个变量值:

--red: 44;
--green: 135;
--blue: 255;

CSS设置直接改数值,如果是JS设置,借助setProperty()方法,若不了解,可以参考这篇文章:“如何HTML标签和JS中设置CSS3 var变量”。

四、最后结束语

由于var的兼容性限制,这个非常有意思的CSS技巧还不太适合在大型对外项目中使用。

小程序可以一试,因为内核环境相对固定。内部系统,实验项目可以玩一玩,会很有意思。

这种配色技巧其实不仅可以用在按钮上,一些大区域的布局也是可以用的,因为这些布局的背景色可能是动态的 ,此时,文字颜色的配色也可以借助CSS实现自动化。

另外,本文demo中按钮文字就黑白两色,实际上,我们的相乘系数小一点的话,可以有更多的色值出现,配色会更加精致。

以上就是对CSS前景背景自动配色技术的全部介绍,如果您想了解更多有关CSS3教程,请关注PHP中文网。



위 내용은 CSS 전경 및 배경 자동 색상 일치 기술 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 zhangxinxu에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
드래그 ' 및 Droppin ' 반응에서드래그 ' 및 Droppin ' 반응에서Apr 17, 2025 am 11:52 AM

React Ecosystem은 모두 드래그 앤 드롭의 상호 작용에 중점을 둔 많은 라이브러리를 제공합니다. 우리는 React-dnd, React-beautiful-dnd를 가지고 있습니다.

빠른 소프트웨어빠른 소프트웨어Apr 17, 2025 am 11:49 AM

최근 빠른 소프트웨어에 대해 놀랍도록 상호 연결된 것들이있었습니다.

배경 클립이있는 중첩 된 그라디언트배경 클립이있는 중첩 된 그라디언트Apr 17, 2025 am 11:47 AM

나는 자주 배경 클립을 사용한다고 말할 수 없습니다. I ' D WART IT IT는 일상적인 CSS 작업에서 거의 사용되지 않았습니다. 그러나 나는 Stefan Judis의 게시물에서 그것을 상기시켰다.

React 후크와 함께 requestAnimationFrame 사용React 후크와 함께 requestAnimationFrame 사용Apr 17, 2025 am 11:46 AM

requestAnimationFrame을 사용하여 애니메이션은 쉬워야하지만 React의 문서를 철저히 읽지 않으면 몇 가지 문제가 발생할 수 있습니다.

페이지 상단으로 스크롤해야합니까?페이지 상단으로 스크롤해야합니까?Apr 17, 2025 am 11:45 AM

아마도이를 사용자에게 제공하는 가장 쉬운 방법은 요소의 ID를 대상으로하는 링크 일 것입니다. 그래서 ...처럼 ...

최고 (GraphQL) API는 귀하가 작성한 것입니다최고 (GraphQL) API는 귀하가 작성한 것입니다Apr 17, 2025 am 11:36 AM

들어보세요, 나는 GraphQL 전문가가 아니지만 함께 일하는 것을 좋아합니다. 프론트 엔드 개발자로서 데이터를 노출시키는 방법은 꽤 멋지다. 메뉴와 같습니다

주간 플랫폼 뉴스 : 텍스트 간격 북마크, 최상위 차단, 새로운 앰프 로딩 표시기주간 플랫폼 뉴스 : 텍스트 간격 북마크, 최상위 차단, 새로운 앰프 로딩 표시기Apr 17, 2025 am 11:26 AM

이번 주에 타이포그래피를 검사하기위한 편리한 북마크 인 Roundup, JavaScript 모듈과 Facebook의 Facebook 등을 어떻게 가져 오는지 땜질하기 위해 대기하는 편리한 북마크 인 Roundup과 Facebook의

테두리 반경을 보존하는 동안 상자를 확장하는 다양한 방법테두리 반경을 보존하는 동안 상자를 확장하는 다양한 방법Apr 17, 2025 am 11:19 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. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

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

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구