前言:

  都说程序员有三宝:人傻,钱多,死得早。博主身边的程序“猿”一大半应了这三宝,这从侧面说明了一个问题,只有理性是过不好日子的。朋友们应该把工作与生活分开,让生活变得感性,让工作变得理性,两者相提并行,岂不快哉。咳,话题扯得有点远,今天博主给大家写一篇关于css如何设置select、radio 、 checkbox 、file样式的问题,这里不涉及模拟框,仅介绍原生情况下如何做到自定义样式,废话不多说,赖次够!

1.select与input file:

  相信大家都遇到过这样的问题,大多数浏览器select选择框不能被直接修改样式,实在是不够美观,先看一下代码:

    <style type="text/css">
#box{ width: 500px; margin: 50px auto;}
#box select{ width: 200px; height: 30px; border: 1px solid red;background: green;color: #ffffff;}
</style>
<div id="box">
<select name="xuanxiang">
<option value="">选项一</option>
<option value="">选项二</option>
<option value="">选项三</option>
</select>
</div>

这里把select设置成宽度200px,高度30px,边框红色,背景绿色,文字白色;

咱们来看看各大浏览器的显示效果;

博主的win10系统闹小情绪了,ie打不开 将就一下,总之我们可以看到,它最大的问题是右边的箭头,各有特色,另外弹出的框样式也各不相同。

怎么样屏蔽浏览器自带的效果呢,楼主有一个小技巧教给大家,支持ie8及以上的浏览器。(e6是什么?可以吃吗?)。

利用css中的“七层重叠法”,即网页内容先后顺序分别为:背景边框 , 负值z-index , display:block , 浮动 , display:inline-block , z-index:auto , 正值z-index,

越往后在网页中的层级越靠前,也就是说如果一个z-index值为1或者更高的话 它会遮挡掉他之前的所有元素。

利用这个法则以及opacity设置透明度,可以模拟一个样式,这个样式是自定义的。看下面的代码

    <style type="text/css">
#box{ width: 500px; margin: 50px auto; position: relative; }
#box select{ width: 200px; height: 30px; position: relative; z-index: 1; opacity: 0; }
.selectbg{position: absolute; left: 0;top: 0; width: 200px; height: 30px; border: 1px solid red;background: green;color: #ffffff; z-index: -1; line-height: 28px;text-indent: 10px; } </style>
<div id="box">
<select name="xuanxiang">
<option value="">选项一</option>
<option value="">选项二</option>
<option value="">选项三</option>
</select>
<div class="selectbg">选项一</div>
</div>

注意的几个技巧:

  ① select透明度设置成0,而z-index是1。

  ② div被定位在box的左上角而select默认位置就是左上角 所以他们发生了重叠,因为select的透明度是0,它是被隐藏了,但实际上它是在最上层的;

看看这么做的效果:

nice 几款浏览器显示一致。此刻显示的是class名为selectbg的div层,而点击的则还是select;

这段代码还有几个问题,选择后怎么使div文字跟随改变?

改进一下上面的代码,这里需要用到一点儿js代码了:

<style type="text/css">
#box{ width: 200px;height: 30px; margin: 50px auto; position: relative; }
#box select{ width: 100%; height: 100%;position: absolute; left: 0;top: 0; z-index: 1; opacity: 0; }
.selectbg{position: absolute; left: 0;top: 0; width: 100%; height: 100%; border: 1px solid red;background: green;color: #ffffff; z-index: -1; line-height: 28px;text-indent: 10px; }
#box select option{ font-size: 12px; text-align: center; color: #666666; padding: 5px;}
</style>
<div id="box">
<select name="xuanxiang">
<option value="">选项一</option>
<option value="">选项二</option>
<option value="">选项三</option>
</select>
<div class="selectbg">选项一</div>
</div> <script type="text/javascript">
var oSelect = function(){
$("select").on("change",function(){
$(this).next(".selectbg").html($(this).find("option:selected").text()); //$(this).find("option:selected").text() 意为获取select选中的值 设置给selectbg
});
}
oSelect();
</script>

首先,将select也设置为绝对定位,box则接管背景与select的高宽设置;然后给select完成了它应该有的功能;

顺便设置了下option的样式,但是这个设置在谷歌中没有并没有想要的结果。聊胜于无吧。

总结select:

  你可以任意修改select的面板部分样式,这是一个好消息。但是option部分,无法修改。但option部分一般不那么重要,在移动端原生甚至体验会更好;

input file

  
  依旧是根据上一个思路,文件上传框可以变得更直白美观;上代码:

<style type="text/css">
*{ padding: 0; margin: 0;}
.fileloding{ position: absolute; opacity: 1; width: 0%;transition: opacity 500ms;-webkit-transition: opacity 500ms;-ms-transition: opacity 500ms;-moz-transition: opacity 500ms;-o-transition: opacity 500ms; bottom: -15px; height: 15px; background:#90C0F5 ;}
.uploadbox{ width: 150px;height: 150px; position: relative; margin: 100px;}
.uploadbox input[type=file]{ cursor: pointer; position: absolute; width: 100%; height: 100%; z-index: 2; opacity: 0; filter: alpha(opacity=0);}/*设置file框在最上层*/
.uploadbox .uploadbox-bg{ display: block; width: 100%; height: 100%; position: absolute; z-index: 1; background: #dfdfdf; border: 1px solid #cccccc; }/*设置模拟样式*/
.uploadbox .uploadbox-bg p{font-size: 80px; color: #999999;text-align: center;}
.uploadbox .uploadbox-bg span{ display: block; width: 100%; text-align: center; line-height: 15px; font-size: 14px; color: #666666;}
.uploadbox:hover .uploadbox-bg p,.uploadbox:hover .uploadbox-bg span{ color: #90C0F5;} </style>
<body> <div class="uploadbox">
<input type="file" id="uploadbox" value="上传" />
<input type="hidden" name="filepath" id="filepath" value="" />
<div class="uploadbox-bg">
<p>+</p>
<span>点击上传</span>
</div>
</div>
</body>

一个不难看的图片上传;

  原理相同,有兴趣的同学拿下去测试;

2.radio与:checkbox

  网页中还有哪几个不能修改的?

还要radio和checkbox 单选与复选框;如果你用上面的方法,它一样可以被模拟,只是,它还有一个label标签可以做做文章,将它写到label标签中,点击label域则会选中它;

</style>
<style type="text/css">
#box{ position: relative; }
#box label input{ position: absolute; left: 0; top: 0; z-index: -1; }
.rediobg{ background: #ffffff;}
#box label.active .rediobg{ background: red;}
</style>
<div id="box">
<label>
<input type="checkbox" name="" id="" value="" />
<div class="rediobg">
点个赞呗
</div>
</label> </div>
<script type="text/javascript">
$("label").on("click",function(){ //点击label
var _in = $(this).children("input");
if(_in[0].checked){ //判断当前的checkbox 如果选中则给当前label添加一个classname
$(this).addClass("active");
}else{ //如果没选中则移除
$(this).removeClass("active");
}
});
</script>

需要判断checkbox的选中状态,然后改变div的样式;

效果出来了 nice;

3.总结

  写到这里,博文结束了。但是学习的路永远都走不到尽头,希望大家一起共同学习,探讨,有任何疑问在评论区回复即可;  夜深了,博主也是困得要紧,睡觉去也。

---------------------------------------我最嫉妒别人的是:他比我学的快---------------------------------------

我的微信号:    qq:

 欢迎各种技术讨论,如果您有建站需求,欢迎联系;

 (转载请注明出处)

前端开发:css技巧,如何设置select、radio 、 checkbox 、file这些不可直接设置的样式 。的更多相关文章

  1. WEB前端开发CSS基础样式全面总结

    Web前端开发css基础样式全面总结 颜色和单位的使用 颜色 用颜色的名字表示颜色,比如:red 用16进制表示演示 比如:#FF0000 用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-2 ...

  2. 移动平台3G手机网站前端开发布局技巧

    本文转载至:移动平台3G手机网站前端开发布局技巧汇总 - 前端开发-武方博 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相 关的文章,您或许 ...

  3. 移动平台3G手机网站前端开发布局技巧汇总

    移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博   发布:2011-05-10 09:11   分类:移动开发   阅读:120,618 views   7条评论     您或许正在 ...

  4. Web前端开发面试技巧

    Web前端开发面试技巧 面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程.无论大公司还是小公司,之所以在如何招聘到真正有能力的,前端工程师方面会遇到同样的问题. 近 ...

  5. 第十一章 前端开发-css

    第十一章 前端开发-css 1.1.0 css介绍 css是指层叠样式表(Cascading Style Sheets),样式定义如何显示html元素,样式通常又会存在于样式表中. css优势: 内容 ...

  6. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  7. 前端开发css禁止选中文本

    在我们日常的Java web前端开发的过程中呢,程序员们会遇到各种各样的要求,所以不每天学的东西感觉自己都退步了,都更不上时代的发展了. 每天应对各种需求,每天活在疑问中就是我们程序员的真是写照.但我 ...

  8. 1+x 证书 Web 前端开发 css 专项练习

    官方QQ群 1+x 证书 Web 前端开发 css 专项练习 http://blog.zh66.club/index.php/archives/192/

  9. web前端开发CSS命名规范参考

    做为一个web前端工程师,每天接触HTML.css就像吃饭一样,但是作为一名合作.优秀的web前端工程师,对DIV+CSS命名还是有一定的规范的,本文整理了一份web前端开发中DIV+CSS各种命名规 ...

随机推荐

  1. 深入理解CSS中的margin负值

    前面的话 margin属性在实际中非常常用,也是平时踩坑较多的地方.margin折叠部分相信不少人都因为这样那样的原因中过招.margin负值也是很常用的功能,很多特殊的布局方法都依赖于它.它看似简单 ...

  2. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  3. Canvas讲解

    1.Canvas是什么? 简单地说canvas是画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js, 提供简单的二维矢量绘图. 2.步骤: <canvas id=&quo ...

  4. 从史上八大MySQL事故中学到的经验

    本文列举了史上八大MySQL宕机事件原因.影响以及人们从中学到的经验,文中用地震级数来类比宕机事件的严重性和后果,排在最严重层级前两位的是由于亚马逊AWS宕机故障(相当于地震十级和九级). 一.Per ...

  5. DB2重启数据库实例

    DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...

  6. emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点

    摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...

  7. 让 asp.net 在 mac 上飞

    .NET 不跨平台一直饱受争议,虽然微软前端时间放出些消息,要支持.NET跨平台的发展,但是微软一直坚持着不主动.不拒绝.不负责的三不态度,仍然用一种软件帝国的心态,折腾着一些毫无新意的东西.微软想要 ...

  8. 【Java并发编程实战】-----“J.U.C”:CyclicBarrier

    在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...

  9. 对于前端,「微信小程序」其实不美好

    微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...

  10. C++ std::multimap

    std::multimap template < class Key, // multimap::key_type class T, // multimap::mapped_type class ...