Input
A component for various types of text input.
Basic Usage
Input can accept various types of text input.
HTML
<input type="text" placeholder="Enter text" />
<input type="email" placeholder="Enter email" />
<input type="password" placeholder="Enter password" />
<input type="number" placeholder="Enter number" />Live Example:
Input Types
Input supports various types.
HTML
<input type="text" placeholder="Text input" />
<input type="email" placeholder="Email address" />
<input type="password" placeholder="Password" />
<input type="number" placeholder="Number" />
<input type="tel" placeholder="Phone number" />
<input type="url" placeholder="Website URL" />
<input type="search" placeholder="Search..." />
<input type="date" />
<input type="time" />
<input type="month" />
<input type="week" />
<input type="datetime-local" />Live Example:
States
Input supports default, success, danger, disabled, and read-only states.
HTML
<!-- Default -->
<input type="text" placeholder="Default" />
<!-- Success -->
<input type="text" class="success" value="[email protected]" />
<!-- Danger -->
<input type="text" class="danger" value="invalid-email" />
<!-- Disabled -->
<input type="text" placeholder="Disabled" disabled />
<!-- Read-only -->
<input type="text" value="Read-only value" readonly />Live Example:
SCSS
// Success 상태 (border: 1px solid color('success'))
input.success {
border-color: color('success');
&:focus-visible:not(:disabled) {
outline: 4px solid color('success-outline');
}
}
// Danger 상태 (border: 1px solid color('danger'))
input.danger {
border-color: color('danger');
&:focus-visible:not(:disabled) {
outline: 4px solid color('danger-outline');
}
}
// Disabled 상태
input:disabled {
background: color('bg-disabled');
cursor: not-allowed;
}
// Read-only 상태
input:read-only {
border: none;
cursor: default;
}Variants
Input provides various style variants.
HTML
<!-- Default (Border) -->
<input type="text" placeholder="Default (Border)" />
<!-- Fill (Background color) -->
<input type="text" class="fill" placeholder="Fill (Background color)" />
<!-- Text (No border) -->
<input type="text" class="text" placeholder="Text (No border)" />
<!-- Underline (Bottom border only) -->
<input type="text" class="underline" placeholder="Underline (Bottom border only)" />Live Example:
SCSS
// Fill 변형 (background-color: color('default-fill'))
input.fill {
background-color: color('default-fill');
}
// Text 변형 (border: none)
input.text {
border: none;
}
// Underline 변형 (border-bottom만 표시, border-radius: 0)
input.underline {
border: none;
border-bottom: 1px solid color('border-disabled');
border-radius: 0;
&:focus-visible:not(:disabled) {
border-bottom-color: color('primary-base');
}
}Sizes
Input supports various sizes.
HTML
<!-- Default size (padding: s(3) s(4), border-radius: r(3)) -->
<input type="text" placeholder="Default size" />
<!-- Medium size (padding: s(4) s(4), border-radius: r(5)) -->
<input type="text" class="md" placeholder="Medium size" />
<!-- Large size (padding: s(5) s(4), border-radius: r(6)) -->
<input type="text" class="lg" placeholder="Large size" />Live Example:
SCSS
// 기본 크기
input {
padding: s(3) s(4);
border-radius: r(3);
}
// 중간 크기
input.md {
padding: s(4) s(4);
border-radius: r(5);
}
// 큰 크기
input.lg {
padding: s(5) s(4);
border-radius: r(6);
}Icons
You can add icons to inputs.
HTML
<!-- Left icon (input padding-left: s(8), Icon left: s(3)) -->
<div class="with-icon">
<i class="icon-search"></i>
<input type="text" placeholder="Search..." />
</div>
<!-- Right icon (input padding-right: s(7), Icon right: s(3)) -->
<div class="with-right-icon">
<input type="email" placeholder="Email" />
<i class="icon-mail"></i>
</div>Live Example:
SCSS
// 왼쪽 아이콘
.with-icon {
position: relative;
> i {
position: absolute;
left: s(3);
top: 50%;
transform: translateY(-50%);
}
> input {
padding-left: s(8); // 아이콘 공간 확보
}
}
// 오른쪽 아이콘
.with-right-icon {
position: relative;
> i {
position: absolute;
right: s(3);
top: 50%;
transform: translateY(-50%);
}
> input {
padding-right: s(7); // 아이콘 공간 확보
}
}SCSS Styling
You can apply input styles using podo-ui mixins.
component.module.scss
@use 'podo-ui/mixin' as *;
// 기본 input 스타일
input[type='text'],
input[type='email'],
input[type='password'] {
@include p3;
padding: s(3) s(4);
background-color: color('bg-block');
border-radius: r(3);
border: 1px solid color('border-disabled');
&:focus-visible:not(:disabled) {
border-color: color('primary-base');
outline: 4px solid color('primary-outline');
}
&::placeholder {
color: color('placeholder');
}
}
// Success/Danger 상태
input.success {
border: 1px solid color('success');
&:focus-visible:not(:disabled) {
outline: 4px solid color('success-outline');
}
}
input.danger {
border: 1px solid color('danger');
&:focus-visible:not(:disabled) {
outline: 4px solid color('danger-outline');
}
}
// 크기 변형
input.md {
padding: s(4) s(4);
border-radius: r(5);
}
input.lg {
padding: s(5) s(4);
border-radius: r(6);
}