`
咲晚杍
  • 浏览: 5622 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

CSS实现跨浏览器范围输入兼容样式

CSS 
阅读更多

 

中文译文:http://www.evget.com/article/2014/11/10/21804.html

英文原文:http://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/

 

注意:本文代码全部为CSS,开始没看到css选项,就随便选了一个,等写完后才发现可以自行填写,影响不大,懒了下,就没改了~~~原谅偶尴尬

 

---------正文开始--------

自从IE10发布,输入范围样式备受关注。 现在仅仅使用CSS就可以生成跨浏览器、可兼容的输入范围(滑块)。今天,我们就一起来简单实践下。

normal range

把上图变成这样:

styled input

为了简化生成样式的过程,为添加了LESS样式表,CSS也可用。

应用基础CSS样式被输入范围应用的几个样式需要添加到所有浏览器中,覆盖他们的基本外观。

input[type=range] {
  -webkit-appearance: none; /* Hides the slider so that custom slider can be made */
  width: 100%; /* Specific width is required for Firefox. */
}
 
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
}
 
input[type=range]:focus {
  outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */
}
 
input[type=range]::-ms-track {
  width: 100%;
  cursor: pointer;
  background: transparent; /* Hides the slider so custom styles can be added */
  border-color: transparent;
  color: transpare

 这个CSS在所有浏览器中,给我们不可见或者无样式的输入范围。现在我们可以使用定制样 式。

翻阅样式

接下来是我们对组件延路径点击、拖拽的样式设计,一个Html元素就可以实现。

  /* Special styling for WebKit/Blink */
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
  margin-top: -14px; /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; /* Add cool effects to your sliders! */
}
 
/* All the same stuff for Firefox */
input[type=range]::-moz-range-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}
 
/* All the same stuff for IE */
input[type=range]::-ms-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}

 

我们在这里重复代码,如果你不能用多好分隔这些类型的选择符,那这步就必不可少。如果不向浏览器说清楚,他们坑能不会执行。 然后,我们得到下图

invis track

路径样式

翻阅的路径,可以使用普通的HTML元素。 IE浏览器注意:IE 10+范围输入会略有不同。在IE中,可以为上层(如图,路径的右边)和下层(如图,路径的左边)区域路径指定完全不同的风格。 另外要说明的,我们可以为路径应用焦点效果,他会在用户与其交互时发生改变。

   input[type=range]::-webkit-slider-runnable-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}
 
input[type=range]:focus::-webkit-slider-runnable-track {
  background: #367ebd;
}
 
input[type=range]::-moz-range-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}
 
input[type=range]::-ms-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  background: transparent;
  border-color: transparent;
  border-width: 16px 0;
  color: transparent;
}
input[type=range]::-ms-fill-lower {
  background: #2a6495;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]:focus::-ms-fill-lower {
  background: #3071a9;
}
input[type=range]::-ms-fill-upper {
  background: #3071a9;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]:focus::-ms-fill-upper {
  background: #367ebd;
}

 

然后得到下图:

no thumb

构建一个完整的输入范围 之前,我们创建了滑块和路径,现在我们可以写CSS了。 兼容所有浏览器的完整的CSS样式范围输入

input[type=range] {
  -webkit-appearance: none;
  margin: 18px 0;
  width: 100%;
}
input[type=range]:focus {
  outline: none;
}
input[type=range]::-webkit-slider-runnable-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  animate: 0.2s;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
  -webkit-appearance: none;
  margin-top: -14px;
}
input[type=range]:focus::-webkit-slider-runnable-track {
  background: #367ebd;
}
input[type=range]::-moz-range-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  animate: 0.2s;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}
input[type=range]::-moz-range-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}
input[type=range]::-ms-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  animate: 0.2s;
  background: transparent;
  border-color: transparent;
  border-width: 16px 0;
  color: transparent;
}
input[type=range]::-ms-fill-lower {
  background: #2a6495;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-fill-upper {
  background: #3071a9;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}
input[type=range]:focus::-ms-fill-lower {
  background: #3071a9;
}
input[type=range]:focus::-ms-fill-upper {
  background: #367ebd;
}

 

输入范围完成:

styled input

附加风格设计

因为要兼容所有浏览器,CSS会比较大。使用预处理程序可以是其工作更加有效率。下面的LESS文件可以生成上面提到的CSS。

 

@track-color: #424242;
@thumb-color: #555bc8;
 
@thumb-radius: 8px;
@thumb-height: 30px;
@thumb-width: 30px;
@thumb-shadow-size: 1px;
@thumb-shadow-blur: 1px;
@thumb-shadow-color: #111;
@thumb-border-width: 1px;
@thumb-border-color: white;
 
@track-width: 100%;
@track-height: 10px;
@track-shadow-size: 2px;
@track-shadow-blur: 2px;
@track-shadow-color: #222;
@track-border-width: 1px;
@track-border-color: black;
 
@track-radius: 5px;
@contrast: 5%;
 
.shadow(@shadow-size,@shadow-blur,@shadow-color) {
  box-shadow: @shadow-size @shadow-size @shadow-blur @shadow-color, 0px 0px @shadow-size lighten(@shadow-color,5%);
}
 
.track() {
  width: @track-width;
  height: @track-height;
  cursor: pointer;
  animate: 0.2s;
}
 
.thumb() {
  .shadow(@thumb-shadow-size,@thumb-shadow-blur,@thumb-shadow-color);
  border: @thumb-border-width solid @thumb-border-color;
  height: @thumb-height;
  width: @thumb-width;
  border-radius: @thumb-radius;
  background: @thumb-color;
  cursor: pointer;
}
 
input[type=range] {
  -webkit-appearance: none;
  margin: @thumb-height/2 0;
  width: @track-width;
 
  &:focus {
    outline: none;
  }
 
  &::-webkit-slider-runnable-track {
    .track();
    .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);
    background: @track-color;
    border-radius: @track-radius;
    border: @track-border-width solid @track-border-color;
  }
   
  &::-webkit-slider-thumb {
    .thumb();
    -webkit-appearance: none;
    margin-top: ((-@track-border-width * 2 + @track-height) / 2) - (@thumb-height / 2);
  }
 
  &:focus::-webkit-slider-runnable-track {
    background: lighten(@track-color, @contrast);
  }
 
  &::-moz-range-track {
    .track();
    .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);
    background: @track-color;
    border-radius: @track-radius;
     border: @track-border-width solid @track-border-color;
  }
  &::-moz-range-thumb {
     .thumb();
  }
 
  &::-ms-track {
    .track();
    background: transparent;
    border-color: transparent;
    border-width: @thumb-width 0;
    color: transparent;
  }
 
  &::-ms-fill-lower {
    background: darken(@track-color, @contrast);
    border: @track-border-width solid @track-border-color;
    border-radius: @track-radius*2;
    .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);
  }
  &::-ms-fill-upper {
    background: @track-color;
    border: @track-border-width solid @track-border-color;
    border-radius: @track-radius*2;
    .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);
  }
  &::-ms-thumb {
    .thumb();
  }
  &:focus::-ms-fill-lower {
    background: @track-color;
  }
  &:focus::-ms-fill-upper {
    background: lighten(@track-color, @contrast);
  }
}

 

浏览器支持

自身支持范围输入的浏览器有: Firefox 23+, Safari 4+, iOS 5+, Chrome 6+, Opera 11+, IE 10+, Android 4.2+。如果你遵循本文中的代码,自定义样式应该很大程度上是匹配的。

示例:

styled inputs cross browser

 

 

 

 

 

分享到:
评论

相关推荐

    CSS在不同浏览器中兼容问题

    * 针对多种浏览器分别配置合适的 CSS 文件,再通过判断浏览器选择不同 CSS 实现兼容性 * 使用 <!--[endif]--> 等方法来区分不同浏览器 CSS 在不同浏览器中的兼容问题是一个复杂的问题,需要认真对待和解决。通过...

    跨浏览器兼容CSS篇

    ### 跨浏览器兼容CSS篇:实现一致性的策略与技巧 #### 一、引言 在Web设计领域,确保网站在不同浏览器中呈现一致的效果是一项挑战性任务。由于各种浏览器对CSS的支持程度不尽相同,开发者经常面临布局差异的问题。...

    Css跨浏览器的一些整理

    在CSS(层叠样式表)领域,跨浏览器兼容性是一个重要的课题,因为它涉及到网页在不同浏览器上的一致性展示。每个浏览器对CSS的理解和实现可能存在差异,这可能导致样式在Firefox、Chrome、Safari、Edge以及Internet ...

    跨浏览器兼容的CSS代码编程方法

    ### 跨浏览器兼容的CSS代码编程方法 #### 一、引言 随着互联网技术的不断发展,Web前端开发已经成为了一个非常重要且复杂的技术领域。在前端开发过程中,CSS(层叠样式表)作为网页布局和样式设计的主要工具之一,...

    别具光芒——CSS属性、浏览器兼容与网页布局

    "别具光芒——CSS属性、浏览器兼容与网页布局"这个主题涵盖了三个核心概念:CSS属性、浏览器兼容性和网页布局。 首先,我们来详细探讨CSS属性。CSS提供了无数的属性,如颜色、字体、大小、位置等,这些属性共同决定...

    如何让css在所有浏览器下兼容

    ### 如何让CSS在所有浏览器下兼容 在Web开发领域,确保CSS代码能够在不同浏览器上稳定运行是一项重要的技能。本文将详细介绍如何使CSS在各种浏览器(包括但不限于IE6、IE7、IE8以及现代浏览器如Firefox和Chrome)下...

    css和js的浏览器兼容问题汇总

    然而,由于不同浏览器之间对这两种技术的支持程度和实现方式存在差异,导致了跨浏览器兼容性问题的出现。本文主要探讨CSS和JavaScript在IE(Internet Explorer)和其他非IE内核浏览器如Firefox、Chrome、Opera中的...

    CSS-浏览器兼容实战.pdf

    本书分为基础篇和实战篇,旨在帮助开发者理解和应对CSS的跨浏览器兼容性挑战。 基础篇首先介绍了DIV+CSS的优势,这种布局方式使得表现和内容分离,提高了搜索引擎的索引效率,减少了代码量,加快了页面加载速度,...

    css浏览器兼容问题

    ### CSS浏览器兼容问题详解 #### 一、引言 随着Web技术的发展,不同的浏览器对于CSS的支持程度也有所不同,这导致了在开发过程中经常会遇到浏览器之间的兼容性问题。本文旨在总结和分享一系列关于CSS兼容性的技巧...

    div+css中常见的浏览器兼容性处理

    【CSS浏览器兼容性处理】 在Web开发中,CSS(层叠样式表)是用于控制网页元素样式的关键技术。然而,不同的浏览器对CSS的理解和解析方式存在差异,这可能导致在某些浏览器下网页显示不正常。特别是在使用div+css...

    最全的CSS浏览器兼容问题

    以下是一些常见的CSS浏览器兼容性问题及其解决方案: 1. **垂直居中问题**: 在CSS中,要实现一个div的垂直居中,可以使用`vertical-align: middle;`和`line-height`属性。但这种方法要求内容不换行。例如: ```...

    实现跨浏览器的placeholder,兼容IE7

    为了实现跨浏览器的`placeholder`兼容性,开发者通常需要借助JavaScript库或jQuery插件来模拟这一功能。本篇将探讨如何实现这一目标,同时分析提供的文件内容。 首先,`form4_placehold_value.html`很可能是测试...

    Ranger:用于跨浏览器范围输入的 jQuery 插件

    【Ranger:jQuery跨浏览器范围输入插件】 Ranger是一款基于jQuery的插件,专为处理跨浏览器的范围(range)输入问题而设计。在HTML5中,`<input type="range">`元素引入了滑块控件,允许用户通过滑动条选择一个数值...

    css与javascript跨浏览器兼容性总结

    本文以大量实例形式总结了css与javascript跨浏览器的兼容性问题。分享给大家供大家参考。具体总结如下: 一、CSS样式兼容性 1. FLOAT闭合(clearing float) 网页在某些浏览器上显示错位很多时候都是因为使用了float...

    css 浏览器兼容性速查

    "CSS浏览器兼容性速查"是开发者在工作中不可或缺的一个参考资料,它帮助我们了解各种CSS属性在不同浏览器上的表现,以便于优化代码,确保网站在主流浏览器上都能正常显示。 首先,我们要理解浏览器兼容性问题的来源...

    CSS在不同浏览器的兼容性问题

    标题中的“CSS在不同浏览器的兼容性问题”指的是在各种Web浏览器中,CSS(层叠样式表)的解析和执行存在差异,导致网页在不同浏览器上显示不一致的现象。这通常给前端开发者带来挑战,因为他们需要确保网页在所有...

    CSS在浏览器中的兼容性及使用技巧

    例如,IE浏览器早期版本对某些CSS属性的处理与其他浏览器显著不同,这使得设计师在实现跨浏览器兼容性时面临挑战。 解决CSS兼容问题的关键在于理解和运用“hack”技巧。例如,对于IE6、IE7和Firefox,可以使用特定...

    css在浏览器中的兼容性

    然而,不同浏览器对CSS的支持程度不尽相同,这就导致了在实际开发过程中经常遇到的“浏览器兼容性”问题。本文将深入探讨CSS在当今流行浏览器中的兼容性,并为开发者提供一些实用的解决方案。 #### 二、CSS与浏览器...

Global site tag (gtag.js) - Google Analytics