选择元素上的 IE6/IE7 css 边框 [英] IE6/IE7 css border on select element

查看:27
本文介绍了选择元素上的 IE6/IE7 css 边框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有人有使用 CSS 在 Internet Explorer 中设置select"元素边框样式的解决方案?

解决方案

据我所知,在 IE 中是不可能的,因为它使用了 OS 组件.

这是一个
(来源:
(来源:
(来源:easy-designs.net)

那我们怎么做呢?保留基本的 的强大功能控制而不牺牲语义、可用性或可访问性.为了要做到这一点,我们需要检查 本质上是一个无序列表的选择,您可以在其中选择一个值与表单的其余部分一起提交.所以,本质上,它是一个

    的类固醇.继续这个思路,我们可以用一个无序列表替换 的功能?"话,我们如何与表单一起提交正确的值,如果我们不再使用表单控件?

    解决办法

    输入 DOM.该过程的最后一步是制作

      功能/感觉就像一个 :

      • 点击列表将其打开,
      • 单击列表项以更改分配的值 &关闭列表,
      • 未选择任何内容时显示默认值,以及
      • 选择某些内容时显示所选列表项.

      有了这个计划,我们就可以开始依次处理每个部分.

      建立列表

      所以首先我们需要收集所有的属性和并将其重建为 .我们通过运行以下命令来实现这一点JS:

      function selectReplacement(obj) {var ul = document.createElement('ul');ul.className = '选择替换';//收集我们对象的选项var opts = obj.options;//遍历它们,创建 <li>sfor (var i=0; i

      您可能会想现在如果有一个选定的 已经?"我们可以通过在创建之前添加另一个循环来解决这个问题

    • s 寻找选中的,然后将该值存储在为了class我们选择的
    • 为selected":

      …var opts = obj.options;//检查选中的选项(默认为第一个选项)for (var i=0; i

      [注意:从现在开始,将选择选项 5,以证明这一点]

      现在,我们可以在页面上的每个 ?基本风格是这样的:

      ul.selectReplacement {边距:0;填充:0;高度:1.65em;宽度:300px;}ul.selectReplacement li {背景:#cf5a5a;颜色:#fff;光标:指针;显示:无;字体大小:11px;行高:1.7em;列表样式:无;边距:0;填充:1px 12px;宽度:276px;}ul.selectOpen li {显示:块;}ul.selectOpen li:hover {背景:#9e0000;颜色:#fff;}

      现在,为了处理selected"列表项,我们需要更加狡猾:

      ul.selectOpen li {显示:块;}ul.selectReplacement li.selected {颜色:#fff;显示:块;}ul.selectOpen li.selected {背景:#9e0000;显示:块;}ul.selectOpen li:hover,ul.selectOpen li.selected:hover {背景:#9e0000;颜色:#fff;}

      请注意,我们没有为

        使用 :hover 伪类来制作它open,而不是我们将它class-ing 为selectOpen".这样做的原因是双重:

        1. CSS 用于展示,而非行为;和
        2. 我们希望我们的仿,我们需要在onclick中打开列表> 事件,而不是简单的鼠标悬停.

        为了实现这一点,我们可以将我们从 Suckerfish 中学到的知识应用到我们自己的 JavaScript 通过动态分配和删除这个 class``onclick 列表项的事件.为了做到这一点,我们需要能够动态更改每个列表项的 onclick` 事件以进行切换在以下两个动作之间:

        1. 在列表折叠时单击选定/默认选项时显示完整的人造.

        我们将创建一个名为 selectMe() 的函数来处理重新分配选定的"class,为列表重新分配onclick 事件项目,以及虚假的折叠-;但我们仍然需要一种更改所选列表项并更新其值的方法关联的表单元素.

        JavaScript 功能

        我们已经有了一个选定的"class,我们可以应用到我们选定的列表项上,但是我们需要一种方法来在点击它时将它应用到

      • 并将其从其先前选定"的任何兄弟姐妹中删除.这是JS实现这一点:

        function selectMe(obj) {//获取 
      • 的兄弟姐妹var lis = obj.parentNode.getElementsByTagName('li');//依次通过for (var i=0; i,删除选中的类如果(lis [i] != obj){lis[i].className='';} else {//我们选中的
      • ,添加选中的类lis[i].className='selected';}}}
      • [注意:我们可以使用简单的 className 赋值和清空,因为我们在完全控制

      • s.如果您(出于某种原因)需要分配列表项的附加类,我建议将代码修改为在 className 属性中附加并删除selected"类.]

        最后我们添加一个小函数来设置原

发送“验证码”获取 | 15天全站免登陆