崩坏2 琪亚娜复制人:css 上传控件美化
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 16:26:52
一般来说,上传控件不是用flash做就是用input[type=file]元素了,但flash在IPAD上没救了,而input[type=file]在各种浏览器中又长得不是一个样子,因此已经我们需要用CSS来处理一下。听说webkit可以用-webkit-appearance:none;清除默认样式,就可以让你为所欲为了。但天朝的炮灰们(有些公司喜欢称我们为前端攻城师,那岂不就是炮灰吧,每改一次设计就烂头焦额,半死不活),是用不起这么高级的东东,我们还要兼容IE6呢。最后问群里的大大,找到解决方案。
原理大致如下,既然原来的input[type=file]元素很难看就让它消失吧。这里的消失是让它其透明化,并在外面为其包一层,那个父元素相对定位。然后在里面添加一个DIV元素铺底,它与input[type=file]元素是兄弟,但它是绝对定位向左对齐,层级为1,input[type=file]元素是绝对定位向右对齐,层级为3。那个DIV里面再加一个input[type=text]元素,用来冒充input[type=file],我们可以对它做各种美化。好了,现在是模拟原来上传控件的浏览按钮的时候了。让那个DIV也变成一个定位元素,里面放个DIV或IMG什么,这个元素我姑且称之为伪上传按钮吧。伪上传按钮绝对定位向右对齐,层级为2。当用户点击它时,其实是点中那个透明化了的input[type=file]元素。最后是交互部分,默认选中上传文件后,此文件的路径会出现在input里面的,我们搞一个onchange事件,将input[type=file]的value值赋给input[type=text]就行了。
下面是HTML部分
<
div
id
=
"file_wrapper"
>
<
div
id
=
"file_faker"
>
<
input
/>
<
div
id
=
"file_btn"
>
浏 览
div
>
<
span
class
=
"ctr"
>
span
>
<
span
class
=
"cbr"
>
span
>
div
>
<
input
type
=
"file"
id
=
"file_uploader"
/>
div
>
CSS部分
#file_wrapper {
position
:
relative
;
width
:
200px
;
height
:
20px
;
display
:inline-
block
;
}
#file_faker {
position
:
absolute
;
top
:
0px
;
left
:
0px
;
z-index
:
1
;
}
/* 这是用户看到的按钮*/
#file_faker input{
width
:
200px
;
height
:
18px
;
}
/* 这里是按钮*/
#file_btn {
position
:
absolute
;
top
:
0
;
right
:
0
;
width
:
60px
;
height
:
20px
;
line-height
:
20px
;
text-align :
center
;
background
:
#878787
;
color
:
#fff
;
z-index
:
2
;
}
#file_uploader {
position
:
relative
;
text-align
:
right
;
-moz-opacity:
0
;
filter:alpha(opacity:
0
);
opacity:
0
;
z-index
:
3
;
}
/* 模拟圆角 */
.ctr,.cbr{
position
:
absolute
;
background
:
#fff
;
width
:
1px
;
height
:
1px
;
display
:
block
;
z-index
:
4
;
}
.ctr{
top
:
0px
;
right
:
0px
;
}
.cbr{
bottom
:
0px
;
right
:
0px
;
}
JS交互部分
window.onload =
function
(){
var
$=
function
(id) {
return
"string"
==
typeof
id ? document.getElementById(id) : id;
};
$(
"file_uploader"
).onchange =
function
(){
$(
"text_box"
).value =
this
.value;
}
}