假设您希望为文本输入添加漂亮的样式
所以您开始为这些输入添加样式
input {
border: 5px solid white;
-webkit-box-shadow:
inset 0 0 8px rgba(0,0,0,0.1),
0 0 16px rgba(0,0,0,0.1);
-moz-box-shadow:
inset 0 0 8px rgba(0,0,0,0.1),
0 0 16px rgba(0,0,0,0.1);
box-shadow:
inset 0 0 8px rgba(0,0,0,0.1),
0 0 16px rgba(0,0,0,0.1);
padding: 15px;
background: rgba(255,255,255,0.5);
margin: 0 0 10px 0;
}
但是,当您添加更多输入、文件输入和提交按钮时,您会感到沮丧,因为您不希望这些样式影响这些元素。
所以您会想,没问题,我只要确保只为文本输入添加样式!
input[type=text] {
/* Awesome styling */
}
但是,当您构建表单时,您会意识到想要使用新的 HTML5 输入类型。这些新的输入类型意味着更好的可访问性、更好的移动设备支持以及增强的桌面浏览器体验。有type=email
、type=url
、type=tel
、type=number
、type=color
等等!这将变得很麻烦……
input[type=text],
input[type=url],
input[type=tel],
input[type=number],
input[type=color],
input[type=email], {
/* And that ain't all of them... */
}
我们该怎么办?好吧,我最喜欢的方法是利用 CSS3 和:not(
) 选择器。因此,我们不包含所有新的类型,而是排除我们不希望设置样式的类型。
input:not([type=submit]):not([type=file]) {
/* omg so much cleaner */
}
现在,您回到了起点(默认用户代理样式表)来处理其他输入。不要害怕使用浏览器默认的表单控件,用户都了解并习惯了它们。
但是等等。IE 直到版本 9 才支持:not()
选择器,而该版本甚至还没有真正发布。是的,确实如此,这很糟糕。但是,如果您想修复这个问题,可以通过快速复制粘贴来实现。
<!--[if lt IE 9]>
<script src="//ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->
这是来自此项目,该项目
将 MSIE5.5-8 升级为与现代浏览器兼容。
对此不感兴趣?好吧,您始终可以列出所有属性选择器(如上所示),这将使您恢复到 IE7 支持。或者,您可以回到在每个输入上都添加类名并通过该类名进行选择,这应该会让您回到互联网的早期。
无论多么想,我们都无法忽视 IE - 以及那些无数身处困境的企业员工,他们只能使用禁用了 js 支持的 IE。我希望我能使用它,但遗憾的是,我做不到 :(
还有,嘿 Chris,提交评论时为什么要刷新页面?我以为你会使用一些性感的 AJAX 功能来无缝提交评论 :)
在内网上,您实际上并不需要这篇博文中描述的那些花哨的东西……因此,您可以随意使用 CSS 0.01 和 Web 1.0 表格疯狂,无需 JS。
另一方面,为通用 WWW 使用而构建的网站可以并且应该在没有 IE6 支持的情况下构建。
做一个男人,说不。为了孩子们。
@Mark,正如您的 Twitter 所暗示的那样,作为一名“可用性”专家,我确定您只是在开玩笑;)
支持 Jayphen
我的想法也一样……
支持 Mark
我的想法也一样……
支持 Mark 6.022 E23 个。这正是我所想的。
哦,我们是否只能给出 +1?我不确定是否可以给 Mark 一摩尔的加号……希望没有人在这里对我大喊大叫。
如果这些公司因为遗留系统等原因无法升级 IE……那么他们需要投资虚拟系统,这些系统可以运行这些遗留应用程序,并且仍然与时俱进。
公司不应该一直使用 IE6,他们需要投资,让遗留软件开发人员提供支持,以便他们可以使用更新的版本并继续前进。
好吧,如果创建跨浏览器、跨操作系统兼容的网站太麻烦。那么也许您应该找一份新工作。
仅供参考……
我想这对于遗留软件开发人员来说也是有效的,对吧?
我认为优雅降级就足够了。您呢?
但我认为每个人都应该拥有一个功能齐全的网站……
我认为只需在需要样式的输入字段中添加一个类即可。
在我看来,这比添加一个 .js 文件来支持一些旧浏览器甚至阻止其中一些浏览器更容易。
尽管如此,我还是放弃了对 IE6 的支持。就像 Google 做的那样。除非客户要求我这样做。这意味着价格 * 2 = IE6 价格。
Rick,一遍又一遍地
一遍又一遍地
一遍又一遍地
一遍又一遍地
一遍又一遍地键入类名更容易吗?
尽管如此,您对 html 标记很残忍。
好吧,是我的错。:p
@Peter Yee 大多数网站有多少个表单输入?至少根据我的经验,数量不多。无论如何,我很有可能只在我的 css 中明确列出我想设置样式的输入类型。
太棒了!但我仍然很生气我们无法对 input[type=file] 进行太多样式化。必须使用 jQuery uniform 进行破解。
附注:刚刚意识到您的“提交评论”按钮缺少 cursor:pointer。
嘿,Chris!
就像 Peter Yee 指出的那样,您的“提交评论”按钮缺少
cursor:pointer;
声明。还有件事,您有一个打字错误。它看起来像这样:
:not(
)当您关闭
时,您忘记了包含
:not()
选择器的结束括号。如果您能修复它,我将不胜感激。只是想指出来,以免人们阅读时感到困惑……=)
不明白……这就是文章中写的方式
在我看来,这看起来没问题?不过现在还早,如果您觉得它仍然有问题,请随时敲我的头,我会修复它。
@chris:在该代码段上方的文本中
并在该按钮上添加一些 cursor:pointer ;-)
他不会在按钮上添加 cursor:pointer; 因为他在他的网站上的按钮上没有使用 cursor:pointer; ^_^
而且,不,投票中的“查看结果” “按钮”不是按钮,而是“a href” :p
Chris,像往常一样清晰易懂,谢谢!致 Aaron Stone:我已经感到困惑了))) 我将在我的工作中使用这些建议。从博主到博主:也许这个链接Greatiful 可以帮助我的众多同事 - 博主通过博客赚钱)注册很容易,确认您的 RSS 频道,然后有时输入并取款。再次感谢,祝好运!
不错的教程!但是,我认为使用 :not() 选择器不是一个好选择。它在您的示例中有效,但是复选框、单选按钮、日历、范围等呢?最终,您最终会在 :not() 规则中使用同样多的选择器。
您说得对,如果您最终 :not() 了与您包含的内容一样多的内容,那将更加混乱和冗长。
另一个需要考虑的是识别类型但对其不做任何处理的浏览器。例如,范围类型和 Firefox 4。您可能实际上希望将文本样式应用于此,因为在该浏览器中,它实际上只是一个文本输入,但在 Chrome 10 中,它确实支持范围输入,范围输入的
-webkit-appearance
将接管并覆盖您的文本样式。文本型
——
文本
电子邮件
网址
电话
搜索
数字
密码
文本型作为后备……
范围
颜色
日期
日期时间
本地日期时间
星期
月份
时间
非文本型
————–
提交/按钮
单选按钮
复选框
文件
所以文本型输入的数量仍然比非文本型输入多一点。
我实际上是在向下滚动并看到它之前就在写这个!但是后来您写了它,现在我关于分离文本型和非文本型元素的部分就过时了……
您错过了 Textarea(显然是文本型)和 Select(不确定如何对其进行分类……)。
文本区域是文本区域,选择框是选择框,因此它们不会像输入框那样容易受到意外错误样式的影响。
太棒了!我尝试了css属性。不错的输入效果,但在ie7、8中不起作用。
ie浏览器有什么解决方法吗?
-vara
阅读文章,到最后。
非常好,先生。我将经常使用它。
很高兴知道有这样的东西,感谢分享。
如果字段彼此相邻,您也可以只使用一个包装div并从那里进行样式设置。仍然不是最好的解决方案,但是……更好。
我同意这种倒退的方法,我唯一担心的是,在使用大量js时,ie9以下页面的加载时间会大大增加。我曾经遇到过,仅仅添加此脚本,ie的加载时间就增加了三倍……这难道不和完全忽略ie一样糟糕吗?
…或者根本不使用IE9.js。
用户仍然可以使用表单,这是最重要的,无论设计如何。
是的,是的,是的,IE用户会错过增强的体验,但是,那又怎样,正如我所说,使用表单是最终目标。这不是IE用户或你/我们的错,他们错过了增强的体验,是谁的错;)
这是其最简单、最有效形式的优雅降级,适用于功能不足的浏览器。
什么?哥们,逗号太多了——那是一个令人困惑的陈述。
哈哈,不多,那是正确的语法;)
不过我确实有一个错别字。我的意思是说:“……你**知道**是谁的错;)”
哦,不,我并不是想做一个语法纳粹!我只是说它有点,嗯,逗号太多了!
你一写这个博客,我就用了它:D
顺便说一句,如何在IE中使用selectivizr.js来选择css 3选择器?只是一个想法。
为什么要使用JavaScript进行格式化?只需为所有浏览器设置一个样式,然后使用渐进增强为理解:not选择器的浏览器设置表单样式?当然,它可能会在您的样式表中添加更多内容,但同样,您使用的供应商属性也是如此。
我认为这是我最喜欢的方式。在整个过程中提供可接受的用户体验,然后仅针对具有浏览器能力的用户启用增强体验。
我完全不同意。我总是使用最好的可用技术,然后为——好吧,说实话,然后我为IE修复它。大多数CSS3内容都可以很好地降级(例如,没有阴影不会影响用户体验),而且如果你在使用ie6且js关闭的情况下,那么你一开始就不能习惯于完整且健康的浏览器体验。
我不会因为鼓式刹车对每个人都可用就给我的汽车装上鼓式刹车——我会安装好的刹车,并将鼓式刹车作为一种选择。
我手动渐进增强我的项目中所有我能增强的内容。
优雅降级会自动发生。
我非常喜欢这篇文章的写作方式——互联网上需要更多这样的文章;让事情变得更有意思!
我喜欢你的文章结构,让我感觉自己越来越聪明——直到最后你对我旧的习惯进行猛烈抨击。
我之前无法创建输入框并对其进行样式设置(尽管从未研究过)。
感谢你的帮助!
非常棒且实用的技巧,Chris!
最后一段太棒了!好文章!我需要研究一下那个回退。
有人是龙珠Z的粉丝!;-P
更有理由喜欢Chris Coyier。
谢谢!每次我到这里,我都能学到新东西!!甚至从评论中也能学到更多!!
CSS执行逻辑操作让我感到高兴!
感谢所有评论者!!评论真的太棒了!
我讨厌HTML创建者为所有不同的控件使用相同的标签(input)——文本、选择和按钮。在为旧版浏览器设置样式时会导致问题(必须使用style=”inp_text”或javascript来修复它)。
我喜欢人们告诉我错别字。当然你也是。Burdon应该是burden。;)
附言。我正在和自己打赌,新的屏幕截图将与jQuery相关。来吧,给我们一点提示!
太棒了!非常感谢你提供这篇文章!这可能对WordPress等非常有用。谢谢!!!
一直在寻找这个……谢谢Chris。
这是我第一次听说:not选择器,太棒了!我记得我试图在一个moodle安装中设置一些按钮的样式,并从为每个按钮添加一个类开始……这是一个糟糕的主意。最终我找到了如何使用类型一次设置所有按钮样式的方法,在某些情况下,这是必须的。
哇,太棒了!
感谢你的分享,但我想知道的是——“这适用于所有浏览器吗?我特别关注IE……”
很棒,不错,我们认为应该在免费主题中实现它。
我遇到的正是这个问题,并且找到了解决这个问题的办法。谢谢。
效果很好。
很有趣。文本输入中的另一个奇特之处(对我来说是一个挑战)是type=search的渲染,至少就iOS Safari而言。我得到了像默认提交按钮一样的球形侧面。也就是说,在1em高字段上使用border-radius 2em,或者类似的东西。(我想对某些人来说很有吸引力……)
(……就在当天同一个下午)令人惊讶的答案是,临时解决方案“-webkit-appearance:none”。谢谢,苹果。