<select> 이제 CSS로 커스터마이징 가능
(developer.chrome.com)- 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 관련 자료
커뮤니티 자료
- Brecht De Ruyte Codepen 모음
- CSS Tricks의 네이티브 vs 커스텀 select 비교
-
Open Props UI의
<select>
구현 - 애니메이션 적용된 커스텀 select 예제