Select

A component for selecting options from a dropdown.

Basic Usage

Select is a dropdown element that allows you to choose one option from multiple choices.

HTML
<select>
  <option value="" disabled selected>Select an option</option>
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
  <option value="3">Option 3</option>
</select>
Live Example:

Placeholder

You can use a placeholder to indicate the unselected state.

HTML
<select>
  <option value="" disabled selected>Select a category</option>
  <option value="electronics">Electronics</option>
  <option value="fashion">Fashion</option>
  <option value="food">Food</option>
</select>
Live Example:

Icons

You can add icons to select elements.

HTML
<div class="with-icon">
  <i class="icon-user"></i>
  <select>
    <option value="" disabled selected>Select user role</option>
    <option value="admin">Admin</option>
    <option value="user">User</option>
    <option value="guest">Guest</option>
  </select>
</div>

<div class="with-icon">
  <i class="icon-globe"></i>
  <select>
    <option value="" disabled selected>Select language</option>
    <option value="ko">Korean</option>
    <option value="en">English</option>
    <option value="ja">Japanese</option>
  </select>
</div>
Live Example:

States

Select supports default, disabled, and multiple selection states.

Live Example:

SCSS Styling

You can apply select styles using podo-ui mixins.

component.module.scss
@use 'podo-ui/mixin' as *;

.customSelect {
  padding: s(3) s(7) s(3) s(5);
  border: 1px solid color(border);
  border-radius: r(3);
  background: color(bg-block);
  color: color(default-deep-base);
  outline: none;
  appearance: none;
  cursor: pointer;

  // 커스텀 화살표 (자동 포함됨)
  background-image: url('data:image/svg+xml,...');
  background-repeat: no-repeat;
  background-position: right 11px center;

  &:focus-visible:not(:disabled) {
    outline: 4px solid color(primary-outline);
  }

  &:disabled {
    color: color(text-action-disabled);
    background-color: color(bg-disabled);
    cursor: not-allowed;
  }
}

// 아이콘과 함께 사용
.withIcon {
  position: relative;
  display: inline-block;

  > i {
    position: absolute;
    left: s(3);
    top: 50%;
    transform: translateY(-50%);
    color: color(text-action);
    pointer-events: none;
  }

  > select {
    padding-left: s(8);
  }
}