6P by xguru 4일전 | ★ favorite | 댓글 3개
  • Chrome 135부터 <select> 요소에 대해 접근성 표준을 유지하면서도 CSS 커스터마이징이 가능한 새로운 기능 지원 시작
  • 수년간의 사양 조율 및 개발 끝에, 오래된 브라우저에서도 깨지지 않는 강력한 구성 요소로 제공됨
  • HTML 콘텐츠도 포함 가능하며, appearance: base-select 가 추가되면서 애니메이션, 스타일등 다양한 커스터마이징이 가능해짐

appearance: base-select 소개

  • 새로운 CSS 속성 appearance: base-select<select> 요소를 커스터마이징 가능한 새로운 상태로 만듦
    .custom-select {  
      &, &::picker(select) {  
        appearance: base-select;    
      }  
    }  
    
  • base-select 사용 시 생기는 새로운 기능

    • <select> 내부 콘텐츠에 대한 브라우저의 HTML 파서 동작 변경
    • 렌더링 방식과 내부 구조 변경
    • 새로운 내부 파트 및 상태 제공
    • 최소한의 기본 디자인 제공 (커스터마이징 최적화)
    • 표시된 옵션이 팝오버처럼 최상위 레이어에 나타남
    • 옵션 위치는 anchor()로 제어 가능
  • base-select 사용 시 사라지는 기능

    • 브라우저 창 외부로 <select> 렌더링 불가
    • 모바일 OS의 기본 선택 UI 호출 안됨
    • 가장 긴 <option>의 너비를 반영하지 않음

<select>에 HTML 콘텐츠 포함 가능

  • 기존에는 <option> 안에 이미지나 SVG 삽입 시 브라우저가 무시함
  • appearance: base-select를 적용하면 HTML 그대로 렌더링됨
  • Chrome에서는 SVG 포함된 옵션이 보이지만 Safari, Firefox 등은 지원하지 않음
  • 코드펜 데모: 실습 링크
  • 이 기능은 Finch 실험으로 도입되어 필요 시 중단 가능함

완전한 커스터마이징 가능

  • base-select의 모든 구성 요소는 교체, 애니메이션, 스타일 적용 가능
  • 다양한 디자인을 통해 의미 있는 선택 UI 구성 가능
  • 예시로는 상태 표시, 아바타 포함 옵션, 색상 선택기, 게시 상태 선택 등 있음
  • 코드펜 데모: 실습 링크

JavaScript 인터페이스는 변경 없음

  • 기존 <select>에 대한 JavaScript 동작은 동일하게 유지됨
  • 단, <option>에 HTML을 넣은 경우 선택된 값 파싱 방식이 달라졌으므로 테스트 필요
  • value 속성을 사용하는 경우 별도 수정 필요 없음

추가 자료

웹 표준

Chrome 관련 자료

커뮤니티 자료

커스터마이징된 <select>를 활용한 데모

그럼 <selectlist>는 필요없게 되는 건가요?

다른 이야기지만, 슬랙봇에서 제목의 <select>가 출력되지 않는군요 ㅎㅎ

앗 ㅠ 이거는 차후에 수정하겠습니다.