이용 등급 평가의 위젯을 개발

년 | 9 시에 2010년 8월 24일 티에리 Koblentz하여 오전 접근성 , 개발 | 18 코멘트

서둘러에서? 로 이동 데모 페이지 .

많은 전자 상거래 사이트, 소셜 네트워킹 서비스, 온라인 커뮤니티 등급이나 평가 기능을 포함합니다. 사람들의 의견을 모집하는 것은 심지어 비즈니스 모델이되었다, 평가 제품, 서비스, 기업 등 전용 사이트가 지금은 없습니다.

투표를 표시하는 데 사용되는 가장 일반적인 인터페이스는 포인트의 특정 번호는 (종종 별빛으로 표현) 각 검토자가 항목에 할당되는 "별 등급 시스템"입니다. 우리는 아마존에서 옐프로 많은 사이트에이 모델을 찾으십시오.

별 등급 시스템의 예

에서 그림 A. 별 등급은 예제 아마존옐프 .

마찬가지로 그림 들이 마크업 기반 쇼를 두 시각적 인터페이스는 비슷합니다,하지만 만약이 두 솔루션은 재미있는 것입니다. 하나에 의존 <map> 에서 다른 <img> .

당신은 대부분의 평가 시스템은 다양한 사용자 에이전트에 걸쳐 의미와 "경영"이라고 입증 일부 마크업을 기반으로됩니다 생각할 수도 있겠지만 - 그 평가 시스템이 하나가 동작을 적용하는 HTML 요소와 속성의 특정 집합에 기초하고있을 수도있다는 것입니다 JS와 CSS를 통한 스타일. 말도 것이지만, 그것은 깨어날 것입니다. 그것이 마크업 측면에서 본다면 저자 막 모든 것을 시도하십시오

  • <a> ,
  • <img> ,
  • <span> ,
  • <li> ,
  • <map> ,
  • <div> ,
  • <input> ,
  • 등 ...

마이크로 포맷의 경우

등급을 표시하는 몇 가지 이미지 기반 기법을 제시하기 전에, 난 그것이 기본적이고 간단 접근법 (에서 언급할 가치가있다 생각하는 마이크로 포맷 문자를 사용합니다) :

 <abbr class="rating" title="3 stars">***</abbr> 
프로
그것은 간단하고 의미입니다.
이윤은 최소이다.
방법은 CSS에 의존하지 않습니다.
방법은 이미지에 의존하지 않습니다.
어떤 HTTP 요청은 없습니다.
단점
그것은 반 값 (예 : 3.5 별들을)를 대표하는 것은 불가능
그것은 오직 별표 ( "별 등급")와 "작동".
스크린 리더는 기본적으로 약자를 (이 경우에는 큰 문제가 아닐 수도 있음) 확장되지 않습니다.

참고 : 스크린 독자가 (적어도 때문에 오히려 ★ (★)보다 "*"를 사용 JAWSNVDA ) HTML 엔티티를 무시하는 것 같습니다.

이윤은 이미지 기반의 등급을 표시하는 방법

그것이 이미지를 표시되면, 저자는 많은 옵션이 있습니다.

등급마다 하나의 이미지

단일 이미지를 사용 :

 <img src="4stars.png" alt="4 out of five"> 
한 별
다섯 아웃 1
두명의 스타
다섯 밖이
별세
5 판 3
네 별빛
네 다섯 아웃
별 다섯개
다섯 5
프로
등급마다 하나의 이미지를 사용하면 간단하고 의미입니다.
방법은 CSS에 의존하지 않습니다.
최소 마크업.
단점
여러 이미지가있는대로 많은 HTTP 요청을 만듭니다.
저자는 더 많은 자산을 처리하는 (만드는 CDN을 강요하는 때, 사이트 색상 변경 등 수정 이미지)을 가지고로서 성능 문제 우선, 그것은 유지 보수 악몽이 될 수 있습니다.
대체 텍스트가 무시되기 때문에 텍스트를 선택하면 오페라 (적어도 버전 9.52에서)으로 불가능

단위 당 하나의 이미지

whatwg의에서 작업 초안 :

 <img alt="4 out of 5" src="one-star.png"> <img alt="" src="one-star.png"> <img alt="" src="one-star.png"> <img alt="" src="one-star.png"> <img alt="" src="no-star.png"> 
한 별
다섯 아웃 1
두명의 스타
다섯 밖이
별세
5 판 3
네 별빛
네 다섯 아웃
별 다섯개
다섯 5
프로
이 사용 img 등급 당 요소 것은 HTTP 요청의 수를 감소.
방법은 CSS에 의존하지 않습니다.
단점
오페라에서는 이미지가 비활성화된 경우, 대체 텍스트가 선택되지이며, (작은 화면보기에서) 해당 텍스트는 덜 판독하게 테두리로 렌더링됩니다.

이것은 논란의 작업 초안에서 가져 않습니다. 대체 텍스트를 정확하고 간결하여 이미지를 표현하지 못하기 때문에 제 생각에는,이 방법은 허용되지 않습니다. 이 방법에 근거하여 해당 이미지 내용을 표현하는 경우 그리고,, 그때는 왜없이 그 중 일부를 떠나 alt 텍스트?

에서 Ajaxian 예를 들어, 저자가 그 각각의 콘텐츠는 것을 고려한다면 이해 되네요마다 하나의 이미지로 대체 텍스트를 사용하고 있습니다 :

 <img [snip] alt="+" src="star1.png"/> <img [snip] alt="+" src="star1.png"/> <img [snip] alt="+" src="star1.png"/> <img [snip] alt="-" src="star0.png"/> <img [snip] alt="-" src="star0.png"/> 

어떤 경우에는 하나의 요소를 (사용하는 대 별이가 많은 이미지로 사용 img 아니면 다른 문제)이 투표 메커니즘을 촉진의 주요 장점이 있습니다 - 사용자가 자신의 투표를 위해 스타 중 하나를 선택 어디. 그래서 우리가 염두에 두어야합니다 ...

배경 이미지에 대한 요정

다음과 같은 기술의 개발자에 의해 원래 구현 전략의 적응은 야후! 음악 :

마크업
 <span class="rating r1 stars">1 of 5</span> <span class="rating r2 stars">2 of 5</span> <span class="rating r3 stars">3 of 5</span> <span class="rating r4 stars">4 of 5</span> <span class="rating r5 stars">5 of 5</span> 
CSS
 .stars { background: transparent url(img/sprite.png) no-repeat; } .rating { font-size: 0; height: 19px; overflow: hidden; vertical-align: middle; width: 96px; display: block; } .r1 { background-position: -385px 0; } .r2 { background-position: -288px 0; } .r3 { background-position: -192px 0; } .r4 { background-position: -96px 0; } 
한 별
5 단계 중 1
두명의 스타
5 단계 중 2
별세
5 단계 중 3
네 별빛
5 단계 중 4
별 다섯개
5 개 중 5
프로
이 방법은 하나의 스프 라이트 이미지에 의존로 단일 HTTP 요청이 필요합니다.
최소 "걸어서 인쇄".
단점
콘텐츠는 이미지를 드러낸 채 공개되지 않습니다.
아무것도 페이지 (인쇄 스타일 시트가이 문제 돌볼 수) 인쇄할 때 표시됩니다 없다.
오페라에서 높은 콘트라스트 스타일 시트는 모든 별들이을 사라지게하는, 동일에 해당하는 고대비 모드 최적화 .
텍스트 선택이 가능하지만 (강조 경유) 분명 아니에요.

마크업의 요정

이러한 접근 방식은 기반으로하는 팁 메소드 사용 요정 이미지<img> 요소보다는 배경 이미지 :

마크업
 <span title="1 of 5" class="rating r1"><img width="0" height="1" src="sprite.gif" alt=""/>1 out of 5</span> <span title="2 of 5" class="rating r2"><img width="0" height="1" src="sprite.gif" alt=""/>2 out of 5</span> <span title="3 of 5" class="rating r3"><img width="0" height="1" src="sprite.gif" alt=""/>3 out of 5</span> <span title="4 of 5" class="rating r4"><img width="0" height="1" src="sprite.gif" alt=""/>4 out of 5</span> <span title="5 of 5" class="rating r5"><img width="0" height="1" src="sprite.gif" alt=""/>5 out of 5</span> 
CSS
 .rating { position: relative; height: 1.6em; width: 8.1em; overflow: hidden; vertical-align: middle; display: block; } .rating img { position: absolute; width: 40.5em; height: 1.55em; top: 0; border: 1px solid #fff; } .r1 img { right: 0; } .r2 img { left: -24.4em; } .r3 img { left: -16.2em; } .r4 img { left: -8.1em; } 
한 별
5 10 분
두명의 스타
5 밖으로이
별세
5 밖으로 3
네 별빛
4 5 밖으로
별 다섯개
5 5
프로
이 방법은 단일 HTTP 요청이 필요합니다.
이 기술은 파이어 폭스 사용자는 "이미지 숨기기"또는 "이미지가 보이지 만들기를"(개발자의 도구 모음에서)를 선택하면 내용을 밝히지 위의 4 가지 방법 중 하나입니다.
그것에 의존하는 다른 솔루션과 사건으로 이미지를 사용할 때는 빨간색 "X"는 각각의 대신 최고 등급 (5 예 5)에서만 나타나는 img 요소.
단점
이미지 디스플레이는 CSS에 의존합니다.

그것은 다른 이미지 대체 기법과는 달리이 방법 있도록 협조할 것입니다 :

  • 이미지는 텍스트 크기 설정에 따라 확장할 수 있습니다.
  • 이미지를 인쇄할 수 있습니다.
  • 전체 이미지 (파이어 폭스) 강조 표시되는 대체 텍스트가 쉽게 선택할 수 있습니다.
  • 이미지 고대비 설정 / 스타일 시트에서 사라지지합니다.
  • 오페라의 대체 텍스트 선택 (이미지를 비활성화하는 경우).
  • Opera의 작은 화면보기의 국경 대체 텍스트입니다.

투표를하기위한 마크업

기본 메커니즘으로 시작

투표를하기 위해, 우리는 간단한 사용자 선택과 제출을 허용 낮은 수준의 투표 메커니즘이 필요합니다. 이를 위해, 우리는 라벨과 컨트롤과 양식을 사용에 의존하고 있습니다 :

마크업
 <fieldset> <legend>Rating</legend> <label><input type="radio" name="movie" value="1_5">1/5</label> <label><input type="radio" name="movie" value="2_5">2/5</label> <label><input type="radio" name="movie" value="3_5">3/5</label> <label><input type="radio" name="movie" value="4_5">4/5</label> <label><input type="radio" name="movie" value="5_5">5/5</label> </fieldset> 
결과
평가

추가 휴식과 공백

더 읽기 쉬움에 대해서는 추가 <br> 와 공백을.

마크업
 <fieldset> 
<legend>Rating</legend> <label><input type="radio" name="movie" value="1_5"> 1/5</label><br> <label><input type="radio" name="movie" value="2_5"> 2/5</label><br> <label><input type="radio" name="movie" value="3_5"> 3/5</label><br> <label><input type="radio" name="movie" value="4_5"> 4/5</label><br> <label><input type="radio" name="movie" value="5_5"> 5/5</label> </fieldset>
결과
평가



마크업에 스프 라이트 이미지를 소개합니다

이 솔루션의 경우 우리는 위의 예제에서보다 작은 스프 라이트를 사용하고 있습니다. 그것은 현재로 구성되어 2 개의 싱글 별이 ( "ON"과 "OFF").

우리는 배치 img 레이블 내부 요소를. 우린 그들이 우리가 그들을 통해 구체적인 규격을 설정하여 그들을 "숨기기"따라서, CSS 지원없이 아무런 가치가 없습니다 가정 widthheight 속성. 를 사용합니다 0 모두 속성으로 일부 UA-s에 깨진 이미지를 보여줄 것이다.

 <form ...> <fieldset> <legend>Rating</legend> <label class="one" title="1 out of 5"><input name="LandOf" value="1" checked="checked" type="radio"> 1/5<img src="star-sprite.gif" alt="" height="0" width="0"></label> <label class="two" title="2 out of 5"><input name="LandOf" value="2" type="radio"> 2/5<img src="star-sprite.gif" alt="" height="0" width="0"></label> <label class="three" title="3 out of 5"><input name="LandOf" value="3" type="radio"> 3/5<img src="star-sprite.gif" alt="" height="0" width="0"></label> <label class="four" title="4 out of 5"><input name="LandOf" value="4" type="radio"> 4/5<img src="star-sprite.gif" alt="" height="0" width="0"></label> <label class="five" title="5 out of 5"><input name="LandOf" value="5" type="radio"> 5/5<img src="star-sprite.gif" alt="" height="0" width="0"></label> </fieldset> </form> 

위의 마크업과 함께, 우리는 (대부분의 브라우저에서) 라벨 선택을 통해 필드 선택을 기대할 수 있습니다.

접근성을 고려

:이기 때문에 불행하게도,이 마크업은 적어도 두 개의 스크린 리더에 문제를 만들고 JAWSNVDA (보고 테스트 케이스 이러한 버그를.) 문제의 사용과 관련되어 title 속성 및 대체 텍스트에 대한 빈 문자열입니다.

스크린 리더 사용자를 혼동하지 않는 해결 방법은 대체 텍스트 (로 "별이"를 사용하는 것입니다 alt )를 삽입하는 자바 스크립트를 사용하여 title mouseover에.

더 나은 마크업
 <fieldset> 
<legend>Rating</legend> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="1_5"> 1/5</label><br> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="2_5"> 2/5</label><br> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="3_5"> 3/5</label><br> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="4_5"> 4/5</label><br> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="5_5"> 5/5</label> </fieldset>
결과
평가



스타일링

CSS를 통해 이미지 크기가 주어진다

우리가 사용하는 em 이미지 글꼴 크기에 따라 성장 또는 축소하도록.

마크업

변하지 않은

CSS
 img { width:2.8em; height:1.4em; } 
결과
평가



당신이 이미 볼 수 있듯이, 이미지를 클릭하면 해당 라디오 버튼을 선택합니다. 암시적 라벨이 문제를 (IE에서 제외) 생산으로 스크립팅 필요는 없습니다.

흐름에서 이미지 제거

스타일링 labelposition:relative 하고있는 이미지 position:absolute 으로 top / left 값 것은 숨길 정도로 충분 input 라벨 내부와 텍스트를.

마크업

변하지 않은

CSS
  레이블 { 
    위치 : 상대적;
 } 
 IMG {
   폭 : 2.8em;
   높이 : 1.4em;
    위치 : 절대; 
    상단 : 0; 
    왼쪽 : 0; 
 } 
결과
평가



레이블 당 하나의 별표를 표시

우리는 스타일 라벨의 크기는 단일 스타의 높이와 너비와 일치하도록합니다.

마크업

변하지 않은

CSS
 label { position:relative;   높이 : 1.4em;
  폭 : 1.4em;
  오버플로우 : 숨겨진;
  디스플레이 : 블록; 
 }
 IMG {
   폭 : 2.8em;
   높이 : 1.4em;
   위치 : 절대;
   상단 : 0;
   왼쪽 : 0;
 } 
결과
평가



수평 별을 표시

우리는 제거 br 을 우리는 레이블을 떠.

마크업

변하지 않은

CSS
  BR {
  디스플레이 : 없음;
 } 
 레이블 {
   위치 : 상대적;
   높이 : 1.4em;
   폭 : 1.4em;
   오버플로우 : 숨겨진;
    디스플레이 : 블록; 
    플로트 : 왼쪽; 
 }
 IMG {
   폭 : 2.8em;
   높이 : 1.4em;
   위치 : 절대;
   상단 : 0;
   왼쪽 : 0;
 } 
결과
평가



등급에 따라 요정 이미지를 표시하기

평가 "5 단계 중 3 아웃"을 설정하려면, 우리는 마지막 두 레이블에 동일한 클래스를 적용합니다. 이 클래스는 라벨 내부 이미지의 위치를​​ 이동합니다.

마크업
 <fieldset> <legend>Rating</legend> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="1_5"> 1/5</label><br> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="2_5"> 2/5</label><br> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="3_5"> 3/5</label><br> <label   클래스 = "no_star"   > <img src="img/small-sprite.gif" width="0" height="1" alt="stars"> <input type="radio" name="movie" value="4_5"> 4 / 5 </ 라벨> <BR>
 <라벨   클래스 = "no_star"   > <img src="img/small-sprite.gif" width="0" height="1" alt="stars"> <input type="radio" name="movie" value="5_5"> 5 / 5 </ 레이블>
 </ fieldset> 
CSS
 br { display:none; } label { position:relative; height:1.4em; width:1.4em; overflow:hidden; float:left; } img { width:2.8em; height:1.4em; position:absolute; top:0; left:0; }   . no_star IMG {
  왼쪽 :-1.4em;
 } 
결과
평가



정보를 표시 혼자 이미지에 의존하지

그것은 이미지가 사용할 수없는 경우에 별이의 표시에 대한 대안을 제공하는 것이 중요합니다. 라벨 및 라디오 버튼이 서로 맨 먼저 스타일을하고 있기 때문입니다. 간단한 해결책은 이동하는 것입니다 input 과 텍스트 오프 스크린 (즉, 사용 text-indent:-999em 하고있는 레이블에 배경 색상을 적용).

마크업

변화 없음

CSS
 br { display:none; } label { position:relative; height:1.4em; width:1.4em; overflow:hidden; float:left;   배경 : 물오리;
  마진 오른쪽 : 1px;
  텍스트 들여쓰기 : - 999em; 
 }
 IMG {
   폭 : 2.8em;
   높이 : 1.4em;
   위치 : 절대;
   상단 : 0;
   왼쪽 : 0;
 }
  . no_star {
  배경 : # CCC;
 } 
 . no_star IMG {
   왼쪽 :-1.4em;
 } 

참고 :

  • text-indent 도 위쪽은 이미지의 컨트롤이 포커스를받을 때마다 점프 수정합니다.
  • 오른쪽 여백은 배경색이 사각형이 아닌 직사각형을 (같은 배경색을 공유하는 인접 레이블 일어날하는) 만들 수 있는지 확인하는 것입니다.
결과
평가



터치 마감

  • 우리는 의사 - 클래스를 사용 :hover 일부 롤오버 효과를 생성하기 위해서,
  • 우리는 fieldset 테두리를 숨길,
  • 우리는 범례를 숨기려면
  • 우리는 스타일 커서를.
마크업

변하지 않은

CSS
 br { display:none; } label { position:relative; height:1.4em; width:1.4em; overflow:hidden; float:left; background:teal; margin-right:1px; text-indent:-999em; } input { position:absolute; left:-999em; top:.5em; } img { width:2.8em; height:1.4em; position:absolute; top:0; left:0;   커서 : 포인터; 
 }
 . no_star {
   배경 : # CCC;
 }
 . no_star IMG {
   왼쪽 :-1.4em;
 }
  레이블 : 가져가 {
  불투명도 : 0.5;
  필터 : 알파 (불투명도 = 50);
 }
 fieldset {
  국경 : 0;
 }
 전설 {
  텍스트 들여쓰기 : - 999em;
 } 

참고 : label:hover 영상을 통해 배경 컬러가 흘러요 IE6에서와 오페라에서 무시됩니다. 에서 데모 페이지 대신 사용하는 opacity , 제가 사용하고 다른 요정 네 상태를 보여줍니다.

결과

평가



사용자 상호 작용을 허용하지 않고 등급 표시

우리는 추가하여 등급이 "읽기 전용"할 수 disabled 하고 checked 적절한에 속성을 input 필드.

마크업

 <fieldset> <legend>Rating</legend> <label><img src="img/small-sprite.gif" width="0" height="1" alt="stars"><input type="radio" name="movie" value="1_5"   비활성화   > 5분의 1 </ 레이블> <br>
   <label> <img src="img/small-sprite.gif" width="0" height="1" alt="stars"> <입력 유형 = "라디오"이름 = "영화"값 = "2_5"   비활성화   > 5분의 2 </ 레이블> <br>
   <label> <img src="img/small-sprite.gif" width="0" height="1" alt="stars"> <입력 유형 = "라디오"이름 = "영화"값 = "3_5"선택 = "   체크   "> 5분의 3 </ 레이블> <br>
   <label class="no_star"> <img src="img/small-sprite.gif" width="0" height="1" alt="stars"> <입력 유형 = "라디오"이름 = "movie"라는 가치 = "4_5"   비활성화   > 5분의 4 </ 레이블> <br>
   <label class="no_star"> <img src="img/small-sprite.gif" width="0" height="1" alt="stars"> <입력 유형 = "라디오"이름 = "movie"라는 가치 = "5_5"   비활성화   > 5분의 5 </ 레이블>
 </ fieldset> 

CSS

사용 규칙 :hover 삭제되었습니다

H4> 결과
평가



프로세스에 더 많은 생각을주는

이때는 스크립트를 지원하지 않고 투표를하는 것이 가능하지만, 시력 사용자는 자신의 선택에 대해 모릅니다. 그래서 우리는 JavaScript를 사용하십시오

  • 그의 선택과 관련하여 사용자에게 피드백을 제공
  • 그들이 라디오 단추를 탐색하는 동안 키보드 사용자에게 시각적인 실마리를 제공합니다.

동시에, 우리는 삽입 스크립트를 사용을 활용 title 사용자가 라벨 / 별을 위로 마우스를 가져가면 때 "툴팁"를 생성합니다 특성을.

스크립트가 지원이있을 경우에만 있기 때문에 자바 스크립트없이는 피드백에 관한 선택의 부족, 우리 스타일의 라벨 및 양식 제어합니다. 우리에 플래그를 설정하는 자바 스크립트를 사용할 수 있도록하려면 html 요소 그리고 우리는 그 고리를 포함하는 자손의 선택자을 기반으로 규칙을 만듭니다. 플래그가없는 경우, 그 규칙은 적용되지 않으며 요소 스타일되지 않습니다.

이것은 데모 페이지 , 최종 제품. 이 솔루션은 다양한 설정에 따라 동작하는 방법을 확인하려면, 당신은 CSS를 해제 JavaScript를 사용 중지, 이미지 경로를 깰, 텍스트 크기를 증가 좋아하는 개발자 도구를 사용하려면, 그리고 더 있습니다 ...

싸다

"허용"해결책을 세우는 것은 사용자의 요구, 사용자 에이전트 '특성, 사용자 에이전트'설정 및 자세한 내용을 파악해야합니다 - 이것은 광범위한 테스트를 의미합니다.

모범 사례를 따르는 것이 항상 확실한되지 않기 때문에이 과정에서 사용자의 피드백이 필수적입니다. 예를 들어, 등에 대한 값을 설정도, 앞서 언급한 alt 라벨 내에서 이미지의 속성은 하는게 안전하게 될 것 같다,하지만 그것이 최소한 두 screenreaders (참조 문제를 만드는 것이 밝혀졌 테스트 케이스를 ).

또한, 보조 장치 '사용자의 의견은 어떤 검증 오류 메시지를 무시하도록 허용 - 하나로서 그 파이어 폭스의 접근성 툴바 보고서 (에 따라 http://bestpractices.cita.uiuc.edu/html/nav/form/ ).

여기서 목표는하지만, 모든 문제를 해결하는 데 아니었어요. 포인팅 장치없이 투표를 할 수있는 것은 나의 우선순위 중 하나지만, 이미지가 비활성화되어 오페라의 솔루션의 모양과 느낌을 개선하는 것은 정말 필수적인 고려 일이 아니다.

이 "여행"의 가장 흥미로운 부분은 같은 문제에 대응, 다양한 상황에서 여러 사용자가 액세스할 솔루션을 만드는 것이었다 :

  • 이미지 해제,
  • 자바 스크립트 오프,
  • CSS 끄기,
  • 상기의 조합.

그것은이 기술에 의존하는 것을 알고도 좋은 img 오히려 별이가 있습니다 배경 이미지보다 요소 :

  • , 사용자의 설정에 따라 자신의 크기를 조정
  • 고대비 모드로 표시,
  • 기본적으로 인쇄 (배경 이미지와는 달리).

이 솔루션이 하나의 스프 라이트에 의존로이 모든 성능을 희생하지 않고 온다 : 별빛

늦은 찾기

저는 최근에 아마존이 자사의 투표 페이지에 구축한 시스템을 발견했다. 그들은 스크립트 지원에 따라 서로 다른 솔루션을 제공로서 그것은 매우 흥미롭습니다. 스크립트가 지원이있다면, 그들은 이미지를 사용 <map> 그들이 라디오 단추를 사용하여 어떤 스크립트가 지원이없는 경우, (흥미있는 접근을). 두 경우 솔루션은 키보드 사용자가 액세스할이며, 이것은 아마존의 플랫폼을위한 차별 핵심은 기능에 대한 액세스를 극대화하는 데 도움이됩니다.

그들은 이미지와 라디오 버튼을 대체하는 자바 스크립트를 사용하지 않습니다 <map> , 대신에, 그들이 사용하는 noscript 테이블 마크업이 라디오 버튼을 포함하는 요소.

"밖으로 상자의"솔루션

드림위버 ®
활발한 등급 위젯
YUI
YUI를위한 등급 스크립트
YUI와 등급 스크립트
JQuery
하프 등급 플러그인
측정자 jQuery 아약스
단순 등급 제도
PHP, MySQL과 jQuery의 5 성급 평가 시스템
워드 프레스
워드 프레스를위한 GD 등급 시스템
GD 등급 평가
리뷰에 대한 등급
플래시
5 성급 평가 시스템 구성 요소
기타.
별 등급은 어떻게해야
별이 빛나는 위젯 2

특별 감사

빅터 Tsaran과 소중한 피드백을위한 토드 Kloots에 대한 특별 감사합니다.

공유하고 확장할 수 : del.icio.us에 북마크 | 디그 그것! | reddit!

18 코멘트

  1. [...] 액세스 스타 등급 위젯»야후 사용자 인터페이스 블로그 (YUIBlog)를 개발을 통해. [...]

    에 의한 Pingback 액세스 스타 등급의 위젯을 개발 - 2010년 8월 24일 #

  2. 일종의 당신 등급 위젯의 넷플 릭스의 구현을 검토 않았 놀란 ...?

    짐 G에 의해 코멘트 - 2010년 8월 25일 #

  3. @ 짐

    제가 그런 생각은하지도 않았다 그래서 내가 넷플 릭스 사용자가 아니지만, 그건 좋은 지적이야.
    그들은 내가 그들의 솔루션을 살펴 전에 내가 한달에 가입하려는 안됐다. 당신 ;) 난 궁금증이 만들로 그 그래도 할 수 있습니다

    댓글 작성자 티에리 Koblentz - 2010년 8월 25일을 #

  4. 기사에 대한 감사합니다! 그것은 접근 가능성에 대해 생각하면 라디오 버튼들이 유용하게 자주 시대에 온 것 같습니다. 그것이 라디오 버튼으로 코드에 접근이 많다는 완벽한 감각을 만들어 어디 검색 (이미지 검색, 검색 위키 피 디아 등)에 대한 드롭 다운 필터를 한 곳에서 우리는 최근 문제가했다. 비록 시각적으로 확실히 라디오 버튼을 사용하려면 먼저하는 생각은 아니었다 ...

    그건 그렇고, 여기는 스타 등급 (저는이 코드가 깨져서하지 않았 으면 좋겠 ...)에 대한 넷플 릭스의 코드입니다 :

    평가 <a rel="nofollow" class="rv5" title="Click이 영화는 별 5 개 </ a>에 It"" href="…" tabindex="0"> 속도 "Loved

    댓글 작성자 데이비드 Calhoun 2010년 8월 26일 - #

  5. 난 당신이 정말 마이크로 포맷 접근 방식을 이해했다고 생각하지 않습니다. 그것은 반 값을 가지고 전적으로 가능합니다 그리고 당신은 '별이'를 할 필요가 없습니다. 이것은 전적으로 받아들일 수 있어야합니다 :

    <span class="rating"> <img src="3-5-stars.png" alt="3.5"> </ span>을

    당신이 오직 5.0 1.0 평가 수있는 한계가있다.

    댓글 작성자 롭 Crowther - 2010년 8월 27일을 #

  6. @ 데이비드 : 고마워 :)

    @ 짐 :

    다윗이 게시한 내용 미리보기를 살펴보면, 그것이 마크업 / CSS에 관해서는 넷플 릭스 특별한 아무것도하지 않는 것 같습니다. 그들은 링크를 사용하고 제가 아는 한 그들은 내가 본 문서에서 언급 문제에 함께 제공되는 배경 이미지 기술을 사용합니다.
    물론, 그 조각에서 나는 행동에 대해 이야기하고 메카니즘을 뒤로 떨어질 수 없어 ...
    나에게 이상한 것 한 가지는 비록 tabindex의 사용 HREF 속성을 가진 링크 = "0"(물론하지 않는 한 그들이 링크를 "해제"할 가치를 전환)입니다.

    @ 롭 :

    그것은 반 값을 가지고 전적으로 가능합니다 그리고 당신은 '별이'를 할 필요가 없습니다.

    당신이 지점을 놓친 믿습니다. 나는이 문서에서 마이크로 포맷을 언급한다면 대신 이미지의 문자의 사용 (*)에 대해, 그들의 "이미지 적은"접근 방식입니다. 어떤 경우에는, 그다지 가치를 대표하는 것은 불가능하고 그 정도는 별표 ( "*")로 움직이지 않아요.

    한편, 귀하가 게시한 솔루션 아홉 이미지보다 아무것도보다 적게 요구한다.
    나는 나은 접근 방법이 필요하다고 생각 :
    1. 별빛이 투명하게하는 이미지를 사용
    2. 스팬에서 이미지를 싸다
    3. (그 별을 통해 표시됩니다) 기간에 배경 색상을 적용
    4. 등급에 따라 크기가 폭

    이렇게하면 하나의 이미지로 절반 값을 포함하여 0에서 5 ~ 모든 가능한 상태를, 대표 수 있어야한다.

    이 경우에, 나의 예제에서와 같이 어떤 "고도"값 집합이 없어야한다, 일반 텍스트 값을 전달해야합니다.

    @ 데이비드, @ 짐, @ 롭 : 의견을 보내주셔서 감사합니다

    댓글 작성자 티에리 Koblentz - 2010년 8월 27일을 #

  7. 당신이 지점을 놓친 믿습니다. 나는이 문서에서 마이크로 포맷을 언급한다면 대신 이미지의 문자의 사용 (*)에 대해, 그들의 "이미지 적은"접근을위한

    나는 하나의 예제를 통해 두 지점을 만들려고 노력했기 때문에 죄송 이미지 것들을 혼동하고 있다고 - 다시 설명 해보자.

    값이 abbr 요소의 제목 속성에서 유래하기 때문에 귀하의 예제에서 (*) 문자가 부적절합니다. 이것은 abbr - 디자인 패턴 . 이러한 자

    <abbr class="rating" title="3.5"> 3 반 별을 </ abbr>
    <abbr class="rating" title="3.5"> 70% </ abbr>
    <abbr class="rating" title="3.5"> 당나귀 </ abbr>

    모두가 5.0 밖에 3.5의 점수를 나타냅니다. 물론, 불행히도 있으므로 이들을 수행

    <abbr class="rating" title="3.5"> *** </ abbr>
    <abbr class="rating" title="3.5"> ****** </ abbr>

    그러나 당신은 예를 들어 '반 스타'을 기념하기 위해 적합한 성격을 가지고있는 한 문자를 사용하여 3.5 별을를 표시할 수 있습니다 :

    <abbr class="rating" title="3.5"> *** X </ abbr>

    나는 기사의 나머지는 대단해 언급해야하고, 지금은 마이크로 포맷에 대한 대한 harping 멈춥시다 :)

    댓글 작성자 롭 Crowther - 2010년 8월 27일을 #

  8. @ 롭

    제발 나를 abbr - 디자인 패턴 ;) 언급도하지 마세요

    나는 ABBR 요소를 이해할 수있는 방법은 태그 사이에 내용이 약어이고 제목 속성이 확장을 위해 사용된다는 점입니다.

    값이 abbr 요소의 제목 속성에서 유래하기 때문에 귀하의 예제에서 (*) 문자가 부적절합니다.

    나의 예제 *의 문자는 주요 데이터를은 *. 둘 사이의 관계가 중요하므로 제목은 마이크로 포맷이 아니라 다른 사용자와 관련이없는 유일한 것입니다. 관련된 제목은 마우스 사용자 (툴팁)이나 제목 값을 읽을 선택한 SR 사용자를 혼동하지 않습니다.

    나의 예제에서 "***"는 "별세"의 약어입니다.
    당신에서 "***", "****", 나귀 등 "3 년반 스타"의 약어입니다. 그것은 마이크로 포맷 이외의 이상하지 않니?

    죄송하지만, imho은 마이크로 포맷은 ABBR를 사용하는 방법은 해킹보다 더 아무것도 없다. 그것은 마이크로 포맷을 위해 잘 작동하지만 많은 사용자를위한 문서의 품질을 낮춰 :-(

    댓글 작성자 티에리 Koblentz - 2010년 8월 27일을 #

  9. 나의 예제에서 "***"는 "별세"의 약어입니다.

    네, 그것은했지만, 제 요점은 필요가 없다는 것입했습니다. 아득히 마이크로 포맷에 관한 한 요소의 텍스트 콘텐츠가 관계가 없습니다.

    당신에서 "***", "****", 나귀 등 "3 년반 스타"의 약어입니다. 그것은 마이크로 포맷 이외의 이상하지 않니?

    그럼 당나귀는 동물의 이름을 기준으로 평가 체제와 이상한 사이트가있다면 될 수 있지만, 다른 두가 나쁜 예가 있어야 했어요.

    죄송하지만, imho은 마이크로 포맷은 ABBR를 사용하는 방법은 해킹보다 더 아무것도 없다.

    네, 그들은 있지만 그것을 사용하여 원래의 예를했습니다. 나는 분수 값이 실제로 가능했다고 보여하려고 시도했습니다 내 원래의 예를 들어, 그렇지 않아. 하지만 대신 지점의 이미지 사용에 focussed, 그래서 대신 예제를 기반으로 동일한 지점을 만들려고.

    난 그냥 네 세가지 죄수 팀의 두가 시연되었다 마이크로 포맷의 제한 않다는 것을 밖에서 당신을 가리 키도록 노력 중이야. 난 당신이 나를 오해하는 것 이유가 될 수도 있습니다 마이크로 포맷의 접근하거나,에 대한 어떤 주장을하지 않았다.

    당신 ABBR를 사용하지 않으려면 사용 가치 제목을 대신 그것이 마이크로 포맷으로 분수 평가 가치를 대표하는 것이 가능 어느 쪽이든 그들은 (반드시 액세스와 호환되는 방식으로하지만) 별표 이외의 다른 것들과 함께 '일하는'합니까 .

    제가 처음에 작은 마이크로 포맷 예제는 모든 시점이 아니었 알기 때문에 난 정말로 이번 닥쳐 것입니다.

    댓글 작성자 롭 Crowther - 2010년 8월 27일을 #

  10. 미안 해요, 프리젠 테이션, 그냥 마크업을 전체 기사를 읽고 모든 코멘트를 생략하지만 HTML5를 사용하게 생각을 가지고 없다.
    사실 저희는 단지 그때 한 요소가 필요합니다

    나머지는 CSS (3)하여 수행할 수 있습니다. 난 두개의 아이디어를 가지고 :

    노란 별, 반 스타와 회색 스타 : 1)이 3 항목을 포함하는, 스프 라이트를 기준으로합니다. 여러 배경을 사용하면 모든을 구축할 수 있습니다. 우선 배경은 필요한 경우 그 후엔 회색 별표, 별표 반개보다 노란색 별표를 반복하는 것입니다. 이 마크업은 CSS와 무거운 선택자 매우 많이 사용을 필요로하더라도 :
    [값 = "2"] meter.rating {...} 모든 다른 값을 = "X"선택 자와 함께.

    2) 이것은 또한 두 행에 함께 요정을 기반으로합니다 :
    첫 번째 행 : 5 노랑, 5 회색 스타
    둘째 줄 : 4.5 노란색, 4.5 회색 스타
    선택자 여전히 위에서와 같은 것입니다,하지만 배경을 함께 쉽게 될 거라고. 그러면 배경 위치와 그것이 올바른 별을를 표시, 그 원하는 위치로 행을 이동, 각 요정의 첫 번째 또는 두 번째 행을 사용합니다.

    아마 자바 스크립트 해킹 (document.createElement ( "m"))와, 이렇게 구현 볼 수 있습니다. 접근성 도구가 이것을 읽을 시간이 좀 걸릴 것입니다 있지만, 우리는 깨끗한 마크업을해야합니다. 그래서 현재 미래 :) 어떤 생각

    댓글 작성자 gossi - 2010년 8월 31일을 #

  11. ou는, 더 나은 이윤은 같을 것입니다 :

    5 아웃 3.5

    또는 무엇이든 한 박자 또는 제목 속성에 넣어 것입니다.

    댓글 작성자 gossi - 2010년 8월 31일을 #

  12. Harch, 마크업은 밖으로 갔지만, 이런 가지고있어

    <meter class="rating" min="1" max="5" value="3.5" title="Stars"> 3.5 5 </ m>의

    이것이 지금 잘되기를 바랍니다

    댓글 작성자 gossi - 2010년 8월 31일을 #

  13. 좋은 기사지만, 나중에 JS로 숨어 야하는 푸쉬 버튼을 '투표'잊지 말아요.

    로마에 의해 코멘트 - 2010년 9월 2일 #을

  14. @ 로마

    당신은 데모 페이지를 확인 해 봤어? 데모 페이지의 하단? ;-)

    의견을 보내주셔서 감사합니다

    @ Gossi

    이 문서는 브라우저를 통해, 다양한 조건 (높은 콘트라스트 스타일 시트, 이미지 해제, JS 해제 등) 하에서 작동하는 솔루션을 만드는 것입니다.
    나는 하나 HTML5 요소, 속성 선택자, 그리고 요정 이미지의 사용을 통해이를 수도 모르겠어요. 적어도 아직 ;-)

    여러분의 의견에 감사드립니다

    댓글 작성자 티에리 Koblentz - 2010년 9월 3일 #을

  15. [...] 올해는 티에리 Koblentz는 별 등급은 위젯에 가까이 가봤 액세스 스타 등급 위젯 개발이라는 야후 사용자 인터페이스 블로그에서 흥미로운 기사를 발간했습니다. 그 기사에서는 티에리는 위대한 일을 [...] 한

    에 의한 Pingback 간편하고 이용 등급 위젯«라이프 @ 고가 도로 커뮤니케이션 - 2011년 4월 28일 #

  16. 티에리, 난에 귀하의 의견을 받았으면 약간 다른 방법을 시도 지침으로 솔루션을 사용 ...
    http://www.lifeathighroad.com/web-development/a-simple-and-accessible-star-rating-widget/~~V

    댓글 작성자 마이크 Badgley - 2011년 4월 28일 #을

  17. @ 마이크

    난 당신의 블로그에 그것을 한

    댓글 작성자 티에리 Koblentz - 2011년 4월 28일 #을

  18. 이것이 멋지 네요. 내 프로젝트 중 하나에 이것을 구현하고 HTTP 요청을 줄일 수 있습니다

    댓글 작성자 러스 - 2011년 5월 3일 #을

죄송합니다, 코멘트 양식은이 시간에 문을 닫습니다.

야후 주최

저작권 © 2006년부터 2012년까지 야후 주식 회사 판권 소유. 개인 정보 보호 정책 - 서비스 약관

에서 제공하는 워드 프레스 에서 야후! 웹 호스팅 .