๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Before. 2021

CSS๋กœ input type="file" ๋ฐ”๊พธ๊ธฐ

by ๋น™๊ณ ๊ตฌ๋ง›ํƒ• 2012. 11. 1.

type="file ์ธํ’‹์ด ์•„๋งˆ ๊ฐ€์žฅ html์—์„œ ์Šคํƒ€์ผ ํ•˜๊ธฐ ์–ด๋ ค์šด ํƒœ๊ทธ์ผ๊ฒ๋‹ˆ๋‹ค.
๋ณด์•ˆ ๋ฌธ์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณ€๊ฒฝํ•˜๋Š”๋ฐ์— ์ œ์•ฝ์„ ๋‘๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋ฌผ๋ก , ํŠธ๋ฆญ์ด ์žˆ๊ธฐ์•ผ ํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๊ณ ์œ ์˜ ์ปจํŠธ๋กค์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„๋˜๋ฉฐ
๊ฒŒ๋‹ค๊ฐ€ ๋ณด๊ธฐ ์•ˆ์ข‹์€ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์จ์•ผ๋œ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๊นŒ๋‹ญ์Šค๋Ÿฌ์šด ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์ฐพ๋Š”๊ฒƒ์ด์ฃ .

 

๋งŒ์•ฝ ์ด ๋ฌธ์ œ๋ฅผ ๊ตฌ๊ธ€๋งํ•ด๋ณด์‹œ๋ฉด, ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด javascript, jquery ๊ทธ๋ฆฌ๊ณ  css๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉํ•œ
ํŠœํ† ๋ฆฌ์–ผ์„ ๊ตฌํ•˜๊ฒŒ ๋ ๊ฒ๋‹ˆ๋‹ค.

 

์ „ ์ƒ๋Œ€์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋…ธ๋ ฅํ–ˆ์”๋‹ˆ๋‹ค.
4๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์„œ ๋‹ค๋ค„ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ฒซ์งธ - ํ…์ŠคํŠธ์ƒ์ž์™€ fileํƒ€์ž…์ธ input์„ ๋งŒ๋“ ๋‹ค

 

div ์™€ input ํŒŒ์ผ ํƒ€์ž…์„ ํ…์ŠคํŠธ ์ƒ์ž์— ๋„ฃ์–ด์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
div๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ "์ฐพ์•„๋ณด๊ธฐ..."๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๊ฐ€ ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (์ฐพ์•„๋ณด๊ธฐ ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ ํ˜น์€ ์›ํ•˜๋Š” ํฌ๊ธฐ)
์ง€๊ธˆ ๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„์€ hidden ๋˜์–ด์žˆ๋Š” div์˜ ํด๋ž˜์Šค์˜ overflow ์†์„ฑ์ž…๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ์ˆจ๊ฒจ์ ธ์žˆ๋Š” div์˜ ๋‚ด์šฉ์ด ํŠ€์–ด๋‚˜์˜ค๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด์ฃ .

 

 

<input id="fileName" class="file_input_textbox" readonly />
 
<div class="file_input_div">
<input type="file" />
</div>


.file_input_textbox
{
floatleft
}
 
.file_input_div
{
positionrelative;
width100px;
height23px;
overflowhidden;
}


์Šคํฌ๋ฆฐ์ƒท:


image
 

๋‘˜์งธ - ์žฌ๋ฐŒ๋Š” ๋ถ€๋ถ„: type="file" ์ธํ’‹์„ ๋” ํฌ๊ฒŒํ•œ๋‹ค

 

์ด์ œ๋Š” div ์•ˆ์˜ type="file" ์ธํ’‹์˜ ๋ฒ„ํŠผ ๋ถ€๋ถ„์„ ๋ณด์ด๊ฒŒ ํ•˜๊ณ  ์™„์ „ํžˆ ์ฑ„์›Œ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ์ด ๊ฒฝ์šฐ์—” ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋‹ˆ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ •๋ ฌํ•˜๋Š”๊ฒƒ์€ ์ด์ œ ์ถฉ๋ถ„ํ•˜๋„ค์š”.

 

๊ทธ๋Ÿผ, ์ด ํŠœํ† ๋ฆฌ์–ผ์˜ ๊ฐ€์žฅ ํฐ ํŠธ๋ฆญ์€ ๋ญ˜๊นŒ์š”?
์ปจํŠธ๋กค ๋ถ€๋ถ„์„ ๋”ํฌ๊ฒŒ ํ•˜๋Š”๊ฑฐ์ฃ , ์–ด๋–ป๊ฒŒ์š”?


๊ทธ๋ƒฅ ํฐํŠธ ํฌ๊ธฐ๋ฅผ ์–ด์ด์—†์ด ํฐ ํฌ๊ธฐ๋กœ ์žก์•„์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (์•„๋งˆ๋„ 30px ์ด๋ฉด ์ถฉ๋ถ„ํ• ๊ฒƒ๊ฐ™๋„ค์š”)

 

<input type="text" id="fileName" class="file_input_textbox" readonly="readonly">
 
<div class="file_input_div">
<input type="file" class="file_input_hidden"  />
</div>


 

.file_input_hidden
{
font-size23px;
positionabsolute;
right0px;
top0px;
opacity: 0;
}


์Šคํฌ๋ฆฐ์ƒท2:

image

 

 

์…‹์งธ - type="file" ์ธํ’‹์„ invisible๋กœ ํ•˜๊ณ  ์ œ์ž‘ํ•œ ๋ฒ„ํŠผ์„ ์ด ๋’ค๋กœ ์ˆจ๊ธฐ๊ธฐ


์ธํ’‹ ํŒŒ์ผ์„ invisible๋กœ ๋งŒ๋“ ๋‹ค๊ณ ํ•ด์„œ ํด๋ฆญ ๋ชปํ•˜๋Š”๊ฑด ์•„๋‹™๋‹ˆ๋‹ค.
invisible๋กœ ๋งŒ๋“ค๊ณ , ๊ทธ ๋’ค๋กœ ์ œ์ž‘ํ•œ ๋ฒ„ํŠผ์„ ๋„ฃ์ฃ .

์ด๋Ÿฐ์‹์œผ๋กœ, ์ œ์ž‘ํ•œ ๋ฒ„ํŠผ์„ ๋ณผ์ˆ˜ ์žˆ์ง€๋งŒ ํด๋ฆญ์‹œ์—, ์‚ฌ์‹ค ์‹ค์ œ (์•ˆ๋ณด์ด๋Š”) ์ฐพ์•„๋ณด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋Š”๊ฒ๋‹ˆ๋‹ค.
โ€œfile_input_buttonโ€ ํด๋ž˜์Šค๋ฅผ ๋ฐ”๊ฟ”์„œ ์ฐพ์•„๋ณด๊ธฐ ๋ฒ„ํŠผ์„ ์›ํ•˜๋Š”๋Œ€๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

<input type="text" id="fileName" class="file_input_textbox" readonly="readonly">
 
<div class="file_input_div">
<input type="button" value="Search files" class="file_input_button" />
<input type="file" class="file_input_hidden" />
</div>


 

.file_input_button
{
width100px;
positionabsolute;
top0px;
background-color#33BB00;
color#FFFFFF;
border-stylesolid;
}
 
.file_input_hidden
{
font-size45px;
positionabsolute;
right0px;
top0px;
opacity: 0;
 
filter: alpha(opacity=0);
-ms-filter: "alpha(opacity=0)";
-khtml-opacity: 0;
-moz-opacity: 0;
}


์Šคํฌ๋ฆฐ์ƒท3:

image

 

 

๋„ท์งธ - ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„: ์„ ํƒ๋œ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ํ…์ŠคํŠธ ์ƒ์ž๋ฅผ ์ฑ„์›Œ๋ผ

 

์ด์ „์˜ ๋‹จ๊ณ„๋ฅผ ๋‹ค ํ•ด์™”๋‹ค๋ฉด, ํŒŒ์ผ์„ ์„ ํƒํ›„์—” ํ…์ŠคํŠธ ์ƒ์ž์— ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋‚˜์˜ค๊ฒŒ ๋ ๊ฒ๋‹ˆ๋‹ค.
์™œ๋ƒํ•˜๋ฉด ํŒŒ์ผ๋ช…์ด ์‹ค์ œ๋กœ๋Š” ์ˆจ๊ฒจ์ง„ type=file ์ธํ’‹์•ˆ์— ์“ฐ์—ฌ์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ, ์ด ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„  ๊ฐ„๋‹จํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์„ type=file ์ธํ’‹์˜ onchange ์ด๋ฒคํŠธ์— ๋”ํ•ด์ค„ ๊ฒ๋‹ˆ๋‹ค.
์ด ๋ช…๋ น์€ ํ…์ŠคํŠธ ์ƒ์ž์— ๊ฐ’(ํŒŒ์ผ๋ช…) ์„ ๋ณต์‚ฌํ•ด์ค๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ๋˜๋Š”๊ฑฐ์ฃ .

 

<input type="text" id="fileName" class="file_input_textbox" readonly="readonly">
 
<div class="file_input_div">
<input type="button" value="Search files" class="file_input_button" />
<input type="file" class="file_input_hidden" onchange="javascript: document.getElementById('fileName').value = this.value" />
</div>


Firefox 3, IE6, IE7, IE8, Opera 10, Chrome 3์—์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ดค๋Š”๋ฐ ๋ชจ๋‘ ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ๋˜๋„ค์š”!

 

์™„์„ฑ๋œ ์ฝ”๋“œ
์ž, ์—ฌ๊ธฐ ์™„์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (CSS์™€ HTML ๋ชจ๋‘ ํ•œ๊ณณ์— ์žˆ์Œ)

//css
.file_input_textbox
{
float: left
}
 
.file_input_div
{
position: relative;
width: 100px;
height: 23px;
overflow: hidden;
}
 
.file_input_button
{
width: 100px;
position: absolute;
top: 0px;
background-color: #33BB00;
color: #FFFFFF;
border-style: solid;
}
 
.file_input_hidden
{
font-size: 45px;
position: absolute;
right: 0px;
top: 0px;
opacity: 0;
 
filter: alpha(opacity=0);
-ms-filter: "alpha(opacity=0)";
-khtml-opacity: 0;
-moz-opacity: 0;
}
 
 
//html
<input type="text" id="fileName" class="file_input_textbox" readonly="readonly">
 
<div class="file_input_div">
<input type="button" value="Search files" class="file_input_button" />
<input type="file" class="file_input_hidden" onchange="javascript: document.getElementById('fileName').value = this.value" />
</div>




์ฐธ๊ณ ๋กœ ์œ„์™€๊ฐ™์ด ๊ทธ๋ƒฅ ์ ์šฉํ•˜์ง€๋ง๊ณ  ์ข€๋” ๋ถ™์—ฌ์•ผ๋ ๊ฒƒ์ด ์žˆ๋‹ค, ๋งŒ์•ฝ ์œ„์™€๊ฐ™์ด ์ ์šฉํ•˜๋ฉด ํ›„์— ๋ฒ„ํŠผ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ค๋ฒ„ํ• ๊ฒฝ์šฐ "์„ ํƒ๋œ ํŒŒ์ผ์ด ์—†๋‹ค" 

๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋œจ๊ธฐ๋•Œ๋ฌธ์— hidden๋˜์žˆ๋Š” file์—๊ฒŒ title์„ ๋„ฃ์–ด์ฃผ๋Š”ํŽธ์ด ์ข‹๋‹ค.






๊ตญ๋‚ด์ถœ์ฒ˜ : http://www.xemall.net/tutorial_designning/730(๋ฒˆ์—ญ)

ํ•ด์™ธ์ถœ์ฒ˜ : http://tiagoe.blogspot.kr/2010/01/css-style-typefile-tags.html