• 검색어를 입력해 주세요.
  • 검색어를 입력해 주세요.
디자인키트 0
블로그 전체목록
화살표

보고계신 기능이 적용된
템플릿이에요!

HTML소스를 구매하시면
전체 소스를 활용하실 수 있어요!

  • 템플릿을 찾지 못했어요!

400여개 디자인

더 많은 템플릿 보기

input file 커스텀하는 방법 | 파일 업로드 버튼 꾸미기부터 파일명 표시까지

CSS 26.07.06 조회 10

input file 커스텀하는 방법 | 파일 업로드 버튼 꾸미기부터 파일명 표시까지


HTML의 <input type="file">은 브라우저마다 기본 UI가 달라 원하는 디자인을 적용하기 어렵습니다. 
그래서 실무에서는 label을 활용해 업로드 버튼을 커스텀하고, JavaScript로 선택한 파일명을 직접 표시하는 방식을 많이 사용합니다.
이번 글에서는 기본 파일 업로드 구조부터 커스텀 방식, 파일명 자동 표시, 그리고 multiple과 accept 속성 활용법까지 단계별로 알아보겠습니다.

➰➰➰

✅ 이번 글에서 알아볼 내용
· 기본 파일 업로드 구조 이해하기
· 파일 업로드 버튼 커스텀하기
· 선택한 파일명 자동 표시하기
· multiple과 accept 속성 활용하기


✏️ 기본 파일 업로드 html 구조 파악하기
1
<input type="file">
cs

<input type="file">만 작성해도 파일 업로드 기능은 사용할 수 있습니다.

하지만 버튼의 디자인은 브라우저에서 기본으로 제공하기 때문에 자유롭게 꾸미기 어렵습니다. 

그래서 대부분의 프로젝트에서는 별도의 UI를 만들어 사용합니다.


✏️ 커스텀.ver 파일 업로드 html 구조 파악하기

커스텀 방식에서는 파일을 선택하는 input과 사용자가 클릭하는 버튼 역할의 label을 분리합니다. 

또한 선택한 파일명을 표시하기 위한 input을 하나 더 추가합니다.

· input[type="file"] : 실제 파일 선택

· label : 버튼 역할

· .file-name : 선택한 파일명 출력

1
2
3
4
5
6
7
<div class="form__item">
    <span class="flex">
      <input type="file" name="bf_file[]" id="sh_file" class="file-hidden" accept=".jpg,.jpeg,.png,.pdf,.hwp,.doc,.docx">
      <input type="text" class="file-name" placeholder="파일을 선택해주세요." readonly>
      <label for="sh_file" class="file-btn">파일찾기</label>
    </span>
</div>
cs


✏️ JavaScript로 파일명 가져오기

change 이벤트는 사용자가 새로운 파일을 선택했을 때 실행됩니다. 

this.files[0].name : 첫 번째 파일의 이름을 가져와 .file-name 입력창의 값으로 넣어주는 방식입니다.

1
2
3
4
5
6
7
8
9
10
11
$('#sh_file').on('change'function () {
    let fileName = '';
    if (this.files && this.files.length > 0) {
        fileName = this.files[0].name;
    }
    // file-name에 파일명 출력
    $(this)
    .closest('.form__item')
    .find('.file-name')
    .val(fileName);
});
cs


See the Pen input file 커스텀하는 방법|파일 업로드 버튼 꾸미기부터 파일명 표시까지 by designkits (@designkits) on CodePen.


✨ 자주 묻는 질문

Q : input file을 CSS만으로도 꾸밀 수 있나요?

브라우저마다 지원 범위가 달라 제한적입니다. 

일반적으로는 input을 숨기고 label을 버튼처럼 사용하는 방식이 가장 많이 사용됩니다.


Q : 왜 label을 사용하나요?

label의 for 속성과 input의 id를 연결하면 label을 클릭했을 때도 파일 선택 창이 열립니다.


Q : 선택한 파일명은 어떻게 가져오나요?

JavaScript에서 input.files[0].name을 사용하면 첫 번째 선택한 파일의 이름을 가져올 수 있습니다.

Q : 여러 개의 파일도 선택할 수 있나요?
가능합니다. multiple 속성을 추가한 뒤 input.files를 순회하여 모든 파일명을 출력하면 됩니다.

Q : 특정 형식의 파일만 업로드할 수 있나요?
accept 속성으로 특정 형식만 선택할 수 있도록 제한할 수 있습니다.
· <input type="file" accept="image/*"> : 모든 이미지 업로드 허용 
· <input type="file" accept=".pdf"> : pdf 업로드 허용

➰➰➰
 
<input type="file">은 기본 디자인의 제약 때문에 대부분 커스텀하여 사용합니다. 
핵심은 실제 파일 입력 요소는 기능만 담당하고, label을 버튼처럼 활용해 원하는 UI를 구현하는 것입니다. 
여기에 JavaScript를 이용해 선택한 파일명을 표시하면 사용성까지 높일 수 있습니다.


블로그 전체목록
디자인키트 카카오상담