목차
부분을 이해하지 못합니다. 단순화를 위해이 기사에서는 다음 선택기를 사용할 것입니다. " > 부분을 이해하지 못하는 반면 Firefox는 부분을 이해하지 못합니다. 단순화를 위해이 기사에서는 다음 선택기를 사용할 것입니다.
속성을 ​​사용하기 때문에 더 이상 키보드 입력에 의존하는 사용자의 접근성 문제인 키보드의 초점을 나타내는 기본 개요가 없습니다.
웹 프론트엔드 CSS 튜토리얼 CSS 전용 별 등급 구성 요소 등! (1 부)

CSS 전용 별 등급 구성 요소 등! (1 부)

Mar 07, 2025 pm 04:38 PM

A CSS-Only Star Rating Component and More! (Part 1) 별 등급 구성 요소 구축은 웹 개발의 고전적인 연습이며 다양한 기술을 사용하여 반복적으로 구현되었습니다. 일반적으로 소량의 JavaScript 코드가 필요하지만 CSS를 사용한 구현은 어떻습니까? 예, 네!

이것은 CSS 만 사용하여 구현 된 별 등급 구성 요소의 데모입니다. 업데이트 등급을 클릭 할 수 있습니다.

멋져요? CSS 만 사용하는 것 외에도 HTML 코드는 단일 요소입니다.

범위 입력 요소는 사용자가 두 경계 (최소 및 최대) 사이의 숫자 값을 선택할 수 있기 때문에 이상적입니다. 우리의 목표는이 기본 요소를 설계하고 추가 태그 나 스크립트없이 스타 등급 구성 요소로 변환하는 것입니다! 또한 마지막에 더 많은 구성 요소를 생성하므로 계속 지켜봐 주시기 바랍니다.

참고 : 이 기사는 CSS 부분에만 초점을 맞 춥니 다. UI, UX 및 접근성 측면에 대해 생각하기 위해 최선을 다했지만 내 구성 요소는 완벽하지 않았습니다. 몇 가지 단점 (오류, 접근성 문제 등)이있을 수 있으므로주의해서 사용하십시오.

요소 입력 요소와 같은 기본 요소를 디자인하는 것은 모든 기본 브라우저 스타일과 다른 내부 구조로 인해 약간 까다로울 수 있습니다. 예를 들어, 범위 입력 요소의 코드를 확인하면 Chrome (또는 Safari, Edge)과 Firefox간에 다른 HTML이 표시됩니다.

<input type="range">
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
운 좋게도, 우리는 내가 의존 할 공통점이 있습니다. 나는 두 가지 다른 요소를 찾을 것입니다 : 메인 요소

(입력 자체) 및 슬라이더 요소 (해당 요소는 마우스를 사용하여 스 와이프하여 값을 업데이트합니다).

우리의 CSS는 주로 다음과 같습니다 유일한 단점은 슬라이더 요소의 스타일을 두 번 반복해야한다는 것입니다. 다음을 시도하지 마십시오 :

전체 선택기가 유효하지 않기 때문에 작동하지 않습니다. Chrome 등은

부분을 이해하지 못하는 반면 Firefox는 <input type="range"> 부분을 이해하지 못합니다. 단순화를 위해이 기사에서는 다음 선택기를 사용할 것입니다.

그러나 데모에는 반복 스타일의 실제 선택기가 포함되어 있습니다. 소개로 충분합니다. 코딩을 시작합시다!

메인 요소 스타일 (스타) 먼저 크기를 정의합니다

우리가 각 별이 정사각형 영역에 있다고 생각하면 5 성급 등급의 경우 높이의 5 배 같은 너비가 필요하므로 를 사용하십시오. 5 값은 입력 요소의 속성의 값으로 정의됩니다.

따라서 우리는 새로 향상된

함수 (현재 크롬 만)에 의존하여 수동으로 정의하는 대신 값을 읽을 수 있습니다!

input[type="range"] {
  /* 主元素样式 */
}

input[type="range"][i]::-webkit-slider-thumb {
  /* Chrome、Safari和Edge的滑块样式 */
}

input[type="range"]::-moz-range-thumb {
  /* Firefox的滑块样式 */
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
이제 간단히

속성을 ​​조정하여 별 수를 제어 할 수 있습니다. 이는 속성이 브라우저에서 내부적으로 사용되므로 값을 업데이트하면 구현과 브라우저의 동작을 제어 할 수 있습니다.

이 강화 된 버전의

는 현재 크롬에서만 사용할 수 있으므로 모든 데모에는 지원되지 않는 브라우저를 돕기위한 폴백 체계가 포함되어 있습니다. attr() 다음 단계는 CSS 마스크를 사용하여 별을 만드는 것입니다. 우리는 모양을 5 번 (

값에 따라 더 이상) 반복해야하므로 마스크 크기는

또는 max와 같거나 높이가 기본적으로 100%에 해당하기 때문에 var(--s) var(--s)와 단순화해야합니다. var(--s) 100% var(--s) 속성이 무엇인지 물어볼 수 있습니까? 나는 그것이 약간의 그라디언트가 필요하다고 말하는 것이 놀라운 일이 아니라고 생각하지만 SVG 일 수도 있습니다. 이 기사는 별 등급 구성 요소를 만드는 것에 관한 것이지만, 스타 부분이 다재다능하게 유지되므로 원하는 모양으로 쉽게 교체 할 수 있습니다. 그렇기 때문에이 게시물의 제목에서 "More"라고 말했습니다. 나중에 동일한 코드 구조를 사용하여 다양한 다른 변형을 얻는 방법을 볼 수 있습니다.

여기에는 별 모양을 구현하는 두 가지 다른 방법을 보여주는 데모가 있습니다. 하나는 그라디언트를 사용하고 다른 하나는 SVG를 사용하는 것입니다.
<input type="range">
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
이 경우 SVG 구현은 더 깨끗해 보이고 코드가 짧아 지지만 그라디언트 구현이 때때로 더 나을 수 있기 때문에 두 가지 방법을 모두 기억합니다.

슬라이더 스타일 (선택된 값) 이제 슬라이더 요소에 집중합시다. 마지막 데모를 사용한 다음 별을 클릭하고 슬라이더의 위치를 ​​확인하십시오. mask-image 좋은 소식은 모든 값 (최소에서 최대)의 경우 슬라이더는 항상 주어진 별의 영역 내에 있지만 각 별은 다른 위치를 가지고 있다는 것입니다. 값에 관계없이 위치가 항상 동일하다면 더 나을 것입니다. 이상적으로는 일관성을 위해 슬라이더는 항상 별의 중심에 있어야합니다.

이것은 위치와 업데이트 방법을 보여주는 그림입니다.

이 라인은 각 값에 대한 슬라이더 위치입니다. 왼쪽에는 슬라이더가 기본 요소의 왼쪽 가장자리에서 오른쪽 가장자리로 이동하는 기본 위치가 있습니다. 오른쪽에서는 양쪽에 약간의 공간을 추가하여 슬라이더 위치를 더 작은 영역으로 제한하면 더 나은 정렬을 얻을 수 있습니다. 이 공간은 별 크기의 절반 또는 입니다. 우리는 이것을 위해 패딩을 사용할 수 있습니다 :

슬라이더 크기에 대해 생각하지 않았기 때문에 더 낫지 만 완벽하지는 않습니다. 즉, 우리가 실제로 중심이 아닙니다. 슬라이더 크기를 매우 작게 만들기 위해 1px와 같은 너비를 사용하기 때문에 이것은 문제가되지 않습니다.

슬라이더는 이제 별 중앙에 위치한 얇은 선입니다. 나는 위치를 강조하기 위해 빨간색을 사용하지만 실제로는 투명하기 때문에 색상이 필요하지 않습니다.

당신은 우리가 여전히 최종 결과와는 거리가 멀다고 생각할 수도 있지만 거의 끝났습니다! 이 퍼즐을 완성하기 위해 속성이 누락되었습니다.

속성을 ​​사용하면 함수를 사용하여 요소 외부에 장식을 그릴 수 있습니다. 이를 위해 슬라이더를 작고 투명하게 만듭니다. 색칠은

를 사용하여 수행됩니다. 나는 소스로 두 개의 단색의 그라디언트를 사용하겠습니다 :

우리는 다음 내용을 작성합니다 :
<input type="range">
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
위는 요소의 각 측면에서

의 영역을 100px로 확장하고 그라디언트가 해당 영역을 채울 것임을 의미합니다. 다시 말해, 그라디언트의 각 색상은 영역의 절반, 즉 100px를 커버합니다. border-image 논리를 이해하십니까? 우리는 슬라이더의 양쪽에 넘쳐나는 음영을 만들었습니다. 별을 클릭 할 때마다 슬라이더를 논리적으로 따라갈 수있는 음영이 있습니다.

이제 100px 대신 매우 큰 값을 사용해 봅시다 :

우리는 거의 끝났습니다! 색칠은 모든 별을 채우지 만 우리는 그것이 중간에 있고 선택한 별 전체에있는 것을 원하지 않습니다. 이를 위해 50%를 사용하는 대신 기울기를 약간 업데이트하면 50%

를 사용합니다. 우리는 별의 너비의 절반에 해당하는 오프셋을 추가합니다. 이는 첫 번째 색상이 더 많은 공간을 차지하고 별 등급 구성 요소가 완벽하다는 것을 의미합니다!

우리는 슬라이더의 높이를 정의하는 대신 코드를 약간 최적화 할 수 있으며 0으로 유지하고 의 수직

를 고려하여 음영을 확장합니다. var(--s)/2

우리는 또한 원추형 그라디언트를 사용하여 그라디언트를 다르게 쓸 수 있습니다.

나는 border-image의 구문이 이해하기 쉽지 않다는 것을 알고 있으며, 설명하기가 조금 빠릅니다. 그러나 나는 Smashing Magazine에 매우 자세한 기사가 있는데, 여기서이 속성을 많은 예제와 함께 해부하고 그것이 어떻게 작동하는지 더 깊이 이해하기 위해 그것을 읽도록 초대합니다. outset 구성 요소의 전체 코드는 다음과 같습니다.

input[type="range"] {
  /* 主元素样式 */
}

input[type="range"][i]::-webkit-slider-thumb {
  /* Chrome、Safari和Edge的滑块样式 */
}

input[type="range"]::-moz-range-thumb {
  /* Firefox的滑块样式 */
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
그게 다야! 몇 줄의 CSS 코드를 사용하면 멋진 별 등급 구성 요소가됩니다!

세미 스타 등급

점수를 하프 스타로 설정하는 방법은 무엇입니까? 이것은 매우 일반적이며 약간의 조정을 통해 이전 코드를 완료 할 수 있습니다.
input[type="range"][i]::-webkit-slider-thumb,
input[type="range"]::-moz-range-thumb {
  /* 滑块样式 */
}
로그인 후 복사
로그인 후 복사
먼저, 입력 요소를 전체 단계 대신 절반으로 증가하도록 업데이트합니다.

기본적으로 단계 크기는 1이지만 .5 (또는 모든 값)로 업데이트 한 다음 최소값을 .5로 업데이트 할 수 있습니다. CSS 측면에서 패딩을 border-image에서

로 변경하고 그라디언트의 오프셋에 대해서도 동일하게 수행합니다.

두 구현의 차이는 절반 계수이며, 이는 또한 계단 크기 값이기도합니다. 이것은 우리가 를 사용하고 두 경우 모두에 맞는 공통 코드를 만들 수 있음을 의미합니다.
input[type="range"]::thumb {
  /* 滑块样式 */
}
로그인 후 복사
input[type="range"] {
  --s: 100px; /* 控制大小 */

  height: var(--s);
  aspect-ratio: 5;

  appearance: none; /* 删除默认浏览器样式 */
}
로그인 후 복사
이것은 단계 크기를 수정하는 것이 과립성을 제어하기 위해해야 ​​할 모든 것인 데모입니다. 별 수를 제어하기 위해

속성을 ​​사용할 수도 있다는 것을 잊지 마십시오.

키보드를 사용하여 를 조정하십시오 아시다시피, 키보드를 사용하여 범위 슬라이더에서 입력 한 값을 조정할 수 있으므로 키보드를 사용하여 점수를 제어 할 수도 있습니다. 이것은 좋은 일이지만 경고가 있습니다.

속성을 ​​사용하기 때문에 더 이상 키보드 입력에 의존하는 사용자의 접근성 문제인 키보드의 초점을 나타내는 기본 개요가 없습니다.

더 나은 사용자 경험을 얻고 구성 요소에 더 액세스 할 수 있도록하려면 포커스에 대한 개요를 표시하는 것이 가장 좋습니다. 가장 쉬운 솔루션은 추가 래퍼를 추가하는 것입니다.

내부의 입력이 초점을 맞추면 개요가 있습니다.

키보드를 사용하여 다음 예제 에서이 두 등급을 조정하십시오. 또 다른 아이디어는 요소 주변의 작은 영역을 보관하여 개요를 표시하는 더 복잡한 마스크 구성을 고려하는 것입니다.
<input type="range">
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
나는 단일 요소 구현을 유지하기 때문에 마지막 메소드를 사용하는 것이 좋습니다. 그러나 HTML 구조를 사용하면 부모 요소에 초점을 추가 할 수 있으며 마스크 구성을 간단하게 유지할 수 있습니다. 그것은 모두 당신에게 달려 있습니다!

더 많은 예!

이전에 말했듯이, 우리는 단순한 별 등급 구성 요소 이상을 만들었습니다. 마스크 값을 쉽게 업데이트하여 원하는 모양을 사용할 수 있습니다.
input[type="range"] {
  /* 主元素样式 */
}

input[type="range"][i]::-webkit-slider-thumb {
  /* Chrome、Safari和Edge的滑块样式 */
}

input[type="range"]::-moz-range-thumb {
  /* Firefox的滑块样式 */
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
여기 예를 들어, 나는 별 대신 심장의 SVG를 사용하고 있습니다.

왜 나비가 아닌가?

이번에는 PNG 이미지를 마스크로 사용합니다. SVG 또는 그라디언트를 사용하는 데 익숙하지 않은 경우 투명한 이미지를 사용할 수 있습니다. SVG, PNG 또는 그라디언트가있는 한이 방법으로 어떤 형태로든 할 수 있습니다.

우리는 다음과 같은 볼륨 컨트롤 구성 요소를 추가로 사용자 정의하고 생성 할 수 있습니다. 마지막 예제에서는 특정 모양을 반복하는 대신 복잡한 마스크 구성을 사용하여 신호 모양을 만듭니다.

input[type="range"][i]::-webkit-slider-thumb,
input[type="range"]::-moz-range-thumb {
  /* 滑块样式 */
}
로그인 후 복사
로그인 후 복사
결론 우리는 별 등급 구성 요소로 시작하여 많은 멋진 예를 들었습니다. 제목은 우리가하는 일이기 때문에 "범위 입력 요소를 설계하는 방법"일 수 있습니다. 스크립트 나 추가 태그없이 기본 구성 요소를 업그레이드하고 몇 줄의 CSS 코드 만 사용했습니다.

> 당신은 어디 계세요? 동일한 코드 구조를 사용하는 또 다른 아름다운 구성 요소를 생각할 수 있습니까? 주석 섹션에서 예제를 공유하십시오!

기사 시리즈

CSS 전용 별 등급 구성 요소 등! (1 부) CSS 전용 별 등급 구성 요소 등! (2 부) - 3 월 7 일에 출시되었습니다!

위 내용은 CSS 전용 별 등급 구성 요소 등! (1 부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Google 글꼴 변수 글꼴 Google 글꼴 변수 글꼴 Apr 09, 2025 am 10:42 AM

Google Fonts가 새로운 디자인 (트윗)을 출시 한 것을 볼 수 있습니다. 마지막 큰 재 설계와 비교할 때 이것은 훨씬 더 반복적 인 느낌이 듭니다. 차이를 간신히 말할 수 있습니다

HTML, CSS 및 JavaScript로 애니메이션 카운트 다운 타이머를 만드는 방법 HTML, CSS 및 JavaScript로 애니메이션 카운트 다운 타이머를 만드는 방법 Apr 11, 2025 am 11:29 AM

프로젝트에 카운트 다운 타이머가 필요한 적이 있습니까? 그런 것은 플러그인에 도달하는 것이 당연하지만 실제로는 훨씬 더 많습니다.

HTML 데이터 속성 안내서 HTML 데이터 속성 안내서 Apr 11, 2025 am 11:50 AM

HTML, CSS 및 JavaScript의 데이터 속성에 대해 알고 싶었던 모든 것.

CSS를 통해 일류 이름 항목으로 자식 요소를 선택하는 방법은 무엇입니까? CSS를 통해 일류 이름 항목으로 자식 요소를 선택하는 방법은 무엇입니까? Apr 05, 2025 pm 11:24 PM

요소 수가 고정되지 않은 경우 CSS를 통해 지정된 클래스 이름의 첫 번째 자식 요소를 선택하는 방법. HTML 구조를 처리 할 때 종종 다른 요소를 만듭니다 ...

플렉스 레이아웃의 자주색 슬래시 영역이 잘못된 '오버플로 공간'으로 간주되는 이유는 무엇입니까? 플렉스 레이아웃의 자주색 슬래시 영역이 잘못된 '오버플로 공간'으로 간주되는 이유는 무엇입니까? Apr 05, 2025 pm 05:51 PM

플렉스 레이아웃의 보라색 슬래시 영역에 대한 질문 플렉스 레이아웃을 사용할 때 개발자 도구 (d ...)와 같은 혼란스러운 현상이 발생할 수 있습니다.

Sass를 더 빨리 만들기위한 개념 증명 Sass를 더 빨리 만들기위한 개념 증명 Apr 16, 2025 am 10:38 AM

새로운 프로젝트가 시작될 때, Sass 컴파일은 눈을 깜박이게합니다. 특히 BrowserSync와 짝을 이루는 경우 기분이 좋습니다.

SVG에서 타탄 패턴을 생성하는 정적 사이트를 만드는 방법 SVG에서 타탄 패턴을 생성하는 정적 사이트를 만드는 방법 Apr 09, 2025 am 11:29 AM

타탄은 일반적으로 스코틀랜드, 특히 세련된 킬트와 관련된 패턴의 천입니다. tartanify.com에서 우리는 5,000 개가 넘는 타탄을 모았습니다

See all articles