前端开发: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:

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

 (转载请注明出处)

======================================================== 转载请注明出处。
目录
相关文章
|
9天前
|
开发框架 前端开发 数据安全/隐私保护
【Flutter 前端技术开发专栏】Flutter 中的布局与样式设计
【4月更文挑战第30天】本文探讨了Flutter的布局和样式设计,关键点包括:1) 布局基础如Column、Row和Stack用于创建复杂结构;2) Container、Center和Expanded等常用组件的作用;3) Theme和Decoration实现全局样式和组件装饰;4) 实战应用如登录界面和列表页面的构建;5) 响应式布局利用MediaQuery和弹性组件适应不同屏幕;6) 性能优化,避免过度复杂设计。了解并掌握这些,有助于开发者创建高效美观的Flutter应用。
【Flutter 前端技术开发专栏】Flutter 中的布局与样式设计
|
1天前
|
前端开发
css设置内嵌样式阴影
css设置内嵌样式阴影
6 0
|
6天前
|
存储 前端开发 JavaScript
【Web 前端】如何找到所有 HTML select 标签的选中项?
【5月更文挑战第2天】【Web 前端】如何找到所有 HTML select 标签的选中项?
|
8天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
8天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
8天前
|
前端开发 JavaScript UED
【专栏:HTML 与 CSS 前端技术趋势篇】Web 性能优化:CSS 与 HTML 的未来趋势
【4月更文挑战第30天】本文探讨了CSS和HTML在Web性能优化中的关键作用,包括样式表压缩、选择器优化、DOM操作减少等策略。随着未来趋势发展,CSS模块系统、自定义属性和响应式设计将得到强化,HTML新特性也将支持复杂组件构建。同时,应对浏览器兼容性、代码复杂度和性能功能平衡的挑战是优化过程中的重要任务。通过案例分析和持续创新,我们可以提升Web应用性能,创造更好的用户体验。
|
8天前
|
移动开发 前端开发 UED
【专栏:HTML与CSS前端技术趋势篇】渐进式增强与优雅降级在前端开发中的实践
【4月更文挑战第30天】前端开发中的渐进式增强和优雅降级是确保跨浏览器、跨设备良好用户体验的关键策略。渐进式增强是从基础功能开始,逐步增加高级特性,保证所有用户能访问基本内容;而优雅降级则是从完整版本出发,向下兼容,确保低版本浏览器仍能使用基本功能。实践中,遵循HTML5/CSS3规范,使用流式布局和响应式设计,检测浏览器特性,并提供备选方案,都是实现这两种策略的有效方法。选择合适策略优化网站,提升用户体验。
|
8天前
|
前端开发 开发者 UED
【专栏:HTML与CSS前端技术趋势篇】网页设计中的CSS Grid与Flexbox之争
【4月更文挑战第30天】本文对比了CSS Grid和Flexbox两种布局工具。Flexbox擅长一维布局,简单易用,适合导航栏和列表;CSS Grid则适用于二维布局,能创建复杂结构,适用于整个页面布局。两者各有优势,在响应式设计中都占有一席之地。随着Web标准发展,它们的结合使用将成为趋势,开发者需掌握两者以应对多样化需求。
|
8天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
9天前
|
前端开发 开发者 UED
【Flutter前端技术开发专栏】Flutter中的图标、字体与样式管理
【4月更文挑战第30天】本文介绍了在Flutter中管理图标、字体和样式的做法。Flutter提供`Icons`类用于内置矢量图标,支持第三方图标库如FontAwesome。自定义字体可通过添加字体文件至`assets`目录并配置`pubspec.yaml`,然后使用`TextStyle`设置。借助`ThemeData`,开发者能统一管理应用主题样式,局部样式可覆盖全局。通过集中管理样式,提升代码复用性和应用一致性。
【Flutter前端技术开发专栏】Flutter中的图标、字体与样式管理