File upload
File upload (파일 업로드)
file 요소는 <input type="file">을 감싸는 간단한 대화형 라벨이에요. 여러 하위 요소로 구성되어 있으며, 색상·크기·정렬 수정자를 지원해요.
출처: 문서
본문
file 요소는 <input type="file">을 감싸는 간단한 대화형 라벨이에요. 여러 하위 요소로 구성돼요:
file: 메인 컨테이너file-label: 요소의 실제 대화형이며 클릭 가능한 부분file-input: 스타일링을 위해 숨겨진 네이티브 파일 입력file-cta: 업로드 콜 투 액션(Call to Action)file-icon: 선택적인 업로드 아이콘file-label: "Choose a file…" 텍스트file-name: 선택된 파일 이름을 담는 컨테이너
Choose a file…
<div class="file">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
</label>
</div>
수정자 (Modifiers)
has-name 수정자와 file-name 요소를 함께 쓰면 선택된 파일 이름의 플레이스홀더를 추가할 수 있어요.
Choose a file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
is-right 수정자로 CTA를 오른쪽으로 옮길 수 있어요.
Choose a file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file has-name is-right">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
is-fullwidth 수정자로 파일 이름이 공간을 채우도록 확장시킬 수도 있어요.
Choose a file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file has-name is-fullwidth">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
is-boxed 수정자로 박스 형태 블록으로 만들 수 있어요.
Choose a file…
<div class="file is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
</label>
</div>
has-name과 is-boxed를 조합할 수도 있어요.
Choose a file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file has-name is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
색상 (Colors)
파일 요소를 색상 수정자로 스타일링할 수 있어요. 예시: is-primary, is-info, is-warning, is-danger.
Primary file…
<div class="file is-primary">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Primary file… </span>
</span>
</label>
</div>
Info file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file is-info has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Info file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
Warning file…
<div class="file is-warning is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-cloud-upload-alt"></i>
</span>
<span class="file-label"> Warning file… </span>
</span>
</label>
</div>
Danger file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file is-danger has-name is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-cloud-upload-alt"></i>
</span>
<span class="file-label"> Danger file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
크기 (Sizes)
4가지 크기 중 하나를 붙일 수 있어요:
is-smallis-normal(기본)is-mediumis-large
Small file… · Normal file… · Medium file… · Large file…
<div class="file is-small">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small file… </span>
</span>
</label>
</div>
<div class="file is-normal">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal file… </span>
</span>
</label>
</div>
<div class="file is-medium">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium file… </span>
</span>
</label>
</div>
<div class="file is-large">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large file… </span>
</span>
</label>
</div>
크기와 has-name을 함께 조합할 수도 있어요.
Small file… · Normal file… · Medium file… · Large file… (각각 파일 이름 포함)
<div class="file is-small has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
<div class="file is-normal has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
<div class="file is-medium has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
<div class="file is-large has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
크기와 is-boxed를 함께 조합할 수도 있어요.
Small file… · Normal file… · Medium file… · Large file… (각각 박스드)
<div class="file is-small is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small file… </span>
</span>
</label>
</div>
<div class="file is-normal is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal file… </span>
</span>
</label>
</div>
<div class="file is-medium is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium file… </span>
</span>
</label>
</div>
<div class="file is-large is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large file… </span>
</span>
</label>
</div>
크기, is-boxed, has-name을 모두 조합할 수도 있어요.
Small file… · Normal file… · Medium file… · Large file… (각각 박스드 + 파일 이름)
<div class="file is-small is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
<div class="file is-normal is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
<div class="file is-medium is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
<div class="file is-large is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
정렬 (Alignment)
파일 입력을 정렬할 수 있어요:
is-centered수정자로 가운데 정렬is-right수정자로 오른쪽 정렬
Centered file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file is-centered is-boxed is-success has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Centered file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
Right file… · Screen Shot 2017-07-29 at 15.54.25.png
<div class="file is-right is-info">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Right file… </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
JavaScript
파일 업로드 입력은 선택된 파일 이름을 가져오기 위해 JavaScript가 필요해요. 예시는 다음과 같아요:
Choose a file… · No file uploaded
const fileInput = document.querySelector("#file-js-example input[type=file]");
fileInput.onchange = () => {
if (fileInput.files.length > 0) {
const fileName = document.querySelector("#file-js-example .file-name");
fileName.textContent = fileInput.files[0].name;
}
};
<div id="file-js-example" class="file has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a file… </span>
</span>
<span class="file-name"> No file uploaded </span>
</label>
</div>
<script>
const fileInput = document.querySelector("#file-js-example input[type=file]");
fileInput.onchange = () => {
if (fileInput.files.length > 0) {
const fileName = document.querySelector("#file-js-example .file-name");
fileName.textContent = fileInput.files[0].name;
}
};
</script>
Sass와 CSS 변수 (Sass and CSS variables)
| Sass 변수 | CSS 변수 | 값 |
|---|---|---|
| ```sass | ||
| $file-radius | ||
| ``` | ```css | |
| var(--bulma-file-radius) | ||
| ``` | ```css | |
| var(--bulma-radius) | ||
| ``` | ||
| ```sass | ||
| $file-cta-color | ||
| ``` | ```css | |
| var(--bulma-) | ||
| ``` | ```css | |
| var(--bulma-text) | ||
| ``` | ||
| ```sass | ||
| $file-cta-hover-color | ||
| ``` | ```css | |
| var(--bulma-) | ||
| ``` | ```css | |
| var(--bulma-text-strong) | ||
| ``` | ||
| ```sass | ||
| $file-cta-active-color | ||
| ``` | ```css | |
| var(--bulma-) | ||
| ``` | ```css | |
| var(--bulma-text-strong) | ||
| ``` | ||
| ```sass | ||
| $file-name-border-color | ||
| ``` | ```css | |
| var(--bulma-file-name-border-color) | ||
| ``` | ```css | |
| var(--bulma-border) | ||
| ``` | ||
| ```sass | ||
| $file-name-border-style | ||
| ``` | ```css | |
| var(--bulma-file-name-border-style) | ||
| ``` | ```css | |
| solid | ||
| ``` | ||
| ```sass | ||
| $file-name-border-width | ||
| ``` | ```css | |
| var(--bulma-file-name-border-width) | ||
| ``` | ```css | |
| 1px 1px 1px 0 | ||
| ``` | ||
| ```sass | ||
| $file-name-max-width | ||
| ``` | ```css | |
| var(--bulma-file-name-max-width) | ||
| ``` | ```css | |
| 16em | ||
| ``` |
더 알아보기 (Learn more)
- Bulma Input (입력) — 텍스트 입력
- Bulma Form 일반 (General) — 폼 컨트롤 기초와 조합