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

前言:

  都说程序员有三宝:人傻,钱多,死得早。博主身边的程序“猿”一大半应了这三宝,这从侧面说明了一个问题,只有理性是过不好日子的。朋友们应该把工作与生活分开,让生活变得感性,让工作变得理性,两者相提并行,岂不快哉。咳,话题扯得有点远,今天博主给大家写一篇关于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:

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

 (转载请注明出处)

时间: 2024-08-24 15:53:24

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

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

本文转载至:移动平台3G手机网站前端开发布局技巧汇总 - 前端开发-武方博 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相 关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的 惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程师,如果您不是,可能您会遇见许多不理解或听不懂的专业术语或前端技术(包括 WEB.Mobile).但是

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

移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博   发布:2011-05-10 09:11   分类:移动开发   阅读:120,618 views   7条评论 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程

前端开发中通过js设置cookie的一组方法

我们在前端开发中,通常都需要获取并记录用户的某些操作设置,这样可以使用户下一次访问网站时不用进行重复的调整设置同一个功能. 此次文章中的方法是在前端开发工作中自己随手写的一组通过js设置与获取cookie的方法,能够应用在多说情况下,没做细挖与深究. js方法的完整代码如下: var cookie = { set:function(key,val,time){//设置cookie方法 var date=new Date(); //获取当前时间 var expiresDays=time; //将d

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

前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简单),使用css的优势显而易见,它可以使页面中的javascript变得更少. 实现逻辑: 核心:hover伪类控制子元素的显示隐藏,添加css3动画;  (没错就是这样简单) :hover伪类,适用于当用户指向一个元素时,例如用户的鼠标指向一个段落p.当用户鼠标离开元素时,恢复元素原有的样式显示

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

官方QQ群 1+x 证书 Web 前端开发 css 专项练习 http://blog.zh66.club/index.php/archives/192/ 原文地址:https://www.cnblogs.com/zhsh666/p/11967944.html

手机网站——前端开发布局技巧汇总

自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程序,运行在高端的移动终端设备). 开发者们都知道在高端智能手机系统中有两种应用程序:一种是基于本地(操作系统)运行的APP:一种是基于高端机的浏览器运行的WebApp,本文将主要讲解后者. WebApp与Native App有何区别呢? Native App: 1.开发成本非常大. 一般使用的开发语言为JAVA.C++.Objective-C. 2.更新体验较

web前端开发——css

一.css介绍 1.css是什么? Cascading Style Sheets缩写,层叠样式表.样式定义如何显示HTML元素,样式通常又会存在于样式表中. 2.为什么需要css? 使HTML页面变得美观: 将HTML页面的内容与样式分离: 提高web开发的工作效率. 3.css的优势 内容与表现分离 网页的表现统一,容易修改 丰富的样式,使页面布局更加灵活 减少网页的代码量,增加网页浏览器速度,节省网络带宽 运用独立页面的css,有利于网页被搜索引擎收录 二.css语法 css语法分为两部分:

Mobile Web 前端开发 CSS动画经验分享

谈到动画作用.CSS动画是Mobilweb开发的利器,CSS动画不得不谈.受限于Mobil设备功能等疑问,PC上的动画完结计划在Mobil上大都行不通,幸运的Mobil上我能够用CSS动画,今日我就来了解一下CSS动画的3个首要成员. CSS改换(Transit transit默许的突变动画.当CSS特点改动的时分,界说好需求改换的CSS特点.transit动画被触发.可是并不是一切的CSS特点改动都会触发translat当前,并没有一个官方的文档列出来那些能够,那些不能够,可是能够经过一些小窍

前端开发 - CSS - 总结

CSS:层叠样式表(Cascading Style Sheets) 1.css的特征2.css的引入3.选择器4.伪类选择器5.伪元素选择器6.字体样式 文本样式 背景属性7.盒模型 border margin padding8.display visibility 属性9.float 属性10.position z-index 属性11.网页布局 一.css的特征: 1.css解决了两个问题: 1.将HTML页面的内容与样式分离. 2.提高web开发的工作效率. 2.css的优势: 1.内容与