正如我最近了解到的,在 HTML5 中,您可以对列表项使用 value 属性,只要它们在有序列表中即可。 http://dev.w3.org/html5/markup/li.html
我一直在尝试根据它们的值来设置列表项的样式。最好我想像这样设计它们:
li[value >= "10"] { background: orange; }
li[value >= "20"] { background: green; }
但是,目前仅使用 CSS 是不可能的。
这是我一直在玩的 fiddle ,尝试不同的东西。 http://jsfiddle.net/Hf57v/2/
HTML:
<ol>
<li value="33"></li>
<li value="4"></li>
<li value="12"></li>
<li value="88"></li>
<li value="jadfk"></li>
</ol>
CSS:
li { width: 20px; height: 20px; margin: 20px; background: gray; }
li[value~="3"] { background: orange; } /* #1 */
li[value="4"] { background: red; } /* #2 */
li[value="12"] { background: blue; } /* #3 */
li[value^="1"] { background: green; } /* #4 */
li[value^="8"] { background: yellow; } /* #5 */
li[value="NaN"] { background: pink; } /* #6 */
1) 这无法使 <li value="33"></li> 的背景变为橙色.
我认为它会,因为它包含一个 3。
2) 这适用于改变 <li value="4"></li>变红。
3) 这适用于改变 <li value="12"></li>变蓝。
4) 这会覆盖 <li value="12"></li>蓝色背景,并将背景更改为绿色。我认为可能不会因为 ="12比 ^="1" 更具体(以 1 开头)。
5) 这适用于改变 <li value="88"></li>变黄。
6) 这不能使 <li value="jadfk"></li> 的背景变成粉红色.我试过了,因为值必须是数字,所以如果它只是一个字符串/文本,它返回 NaN (不是数字)。
此外,ol 的方式有效,如果 li 没有值(value), 或者值为 NaN , 那么 li取前一个 li 的值。在 fiddle 中,<li value="jadfk"></li>呈现为 89.但即使它呈现为 89.它不遵守 li[value^="8"] { background: yellow; }喜欢 88.做。我想知道这是为什么。
主要问题:有没有办法通过 > 来定位 li 值?或 < CSS 中的运算符?
跟进问题:如果答案是否定的,那么是否有任何我没有包含的 hack 或选择器确实有助于同时通过其 value 属性的值来定位更多列表项?
赏金信息:
赏金 jsfiddle 链接 http://jsfiddle.net/tuDBL/
在 fiddle 中,我创建了一个有序列表(ol),其中包含 130 个列表项(li),其值从 0 到 129。li值介于 0-9 之间的 需要具有独特的背景颜色。 li值介于 10-19 之间的 需要具有独特的背景颜色。等等等等,一直到129。所以最后会有12种不同的背景色,每一种都代表10个连续的li。值。赏金赢家很可能是能够使用最少数量的有效 CSS 做到这一点的人。
最佳答案
对于那些按您预期工作的,我假设不需要任何解释。以下是关于其他人的想法。
第 1 点:(如 JoshC 的评论中所述)您的选择器有误。 li[value*="3"] is what you were looking for如果你想让它改变,因为它“包含”一个 3 .
第 4 点:选择器特异性与属性选择器内部的任何内容无关,而是the presence of the attribute selector itself .所以li[value="12"]和 li[value^="1"]具有完全相同的特异性,因为两者都有类型选择器 li和属性选择器 [value]绑在他们身上。因此,css 级联顺序胜出;因此在你的例子中 li[value^="1"]是级联中的最后一个匹配选择器,它获胜(if you reversed the order the other would win)。
第 6 点:css 只是读取 html。它没有看到 ol 是什么本身正在处理不是数字的文本。事实上,在 Firebug 中,它显示的值为 0。在我的系统上,但是 [value="0"] still does not work .仅有的两个适用于非数值的选择器是 the actual value itself li[value="jadfk"]或 li[value] 的不合格属性值,如果您将其设为默认值,则 it would need to be first in the order of your calls , 否则 it would make all of them pink (同样,由于级联顺序和同等特异性)。
我不知道目前有任何方法可以直接对 > 进行评估或 <没有javascript的你想要的属性。至于黑客做这样的事情,a previous answer of mine may be helpful ,假设数字范围有限。这个答案使用的技术与 Lior 后来对这个问题的回答在他的答案中所用的技术基本相同(我不知道他是否从我提供的链接中得到了这个想法,我也不知道,这也不重要),所以我不会在这里重复编码和概念。
由于 Lior 的答案与我的链接答案相似,所以我想到了这个选项。它不使用 :not()选择器(所以如果 IE7 兼容性是一个问题,这可能是更可取的)。相反,它使用通用的兄弟选择器 which is IE7 compatible .它使用 12-13 个选择器(取决于您是否希望前 10 个具有默认背景),并利用级联顺序覆盖之前的颜色值(因此这些选择器在 css 中的顺序很重要)。
li[value] {background: yellow;} /* if other than default bkg. wanted on 1st 10 */
li[value="9"] ~ li[value] {background-color: red;}
li[value="19"] ~ li[value] {background-color: blue;}
li[value="29"] ~ li[value] {background-color: gray;}
li[value="39"] ~ li[value] {background-color: dimgray;}
li[value="49"] ~ li[value] {background-color: brown;}
li[value="59"] ~ li[value] {background-color: purple;}
li[value="69"] ~ li[value] {background-color: Chartreuse;}
li[value="79"] ~ li[value] {background-color: black;}
li[value="89"] ~ li[value] {background-color: DarkSlateBlue;}
li[value="99"] ~ li[value] {background-color: Bisque;}
li[value="109"] ~ li[value] {background-color: Indigo;}
li[value="119"] ~ li[value] {background-color: Lavender;}
(感谢 Lior 的代码提供了此处使用的颜色值——是的,我刷掉了那些。)
这也只适用于我们处理的是有序列表。我链接到的先前答案,我们不是(数字是任意的,没有关系)。
从技术上讲,上面的一些选择器是多余的
假设 value属性只在有序列表中,那么选择器可以简化为:
[value] {background: yellow;} /* if other than default bkg. wanted on 1st 10 */
[value="9"] ~ li {background-color: red;}
[value="19"] ~ li {background-color: blue;}
[value="29"] ~ li {background-color: gray;}
[value="39"] ~ li {background-color: dimgray;}
[value="49"] ~ li {background-color: brown;}
[value="59"] ~ li {background-color: purple;}
[value="69"] ~ li {background-color: Chartreuse;}
[value="79"] ~ li {background-color: black;}
[value="89"] ~ li {background-color: DarkSlateBlue;}
[value="99"] ~ li {background-color: Bisque;}
[value="109"] ~ li {background-color: Indigo;}
[value="119"] ~ li {background-color: Lavender;}
关于css - 按值属性定位列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199701/
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我有这样的哈希trial_hash={"key1"=>1000,"key2"=>34,"key3"=>500,"key4"=>500,"key5"=>500,"key6"=>500}我按值降序排列:my_hash=trial_hash.sort_by{|k,v|v}.reverse我现在是这样理解的:[["key1",1000],["key4",500],["key5",500],["key6",500],["key3",500],["key2",34]]但我希望当值相同时按键的升序排序。我该怎么做?例如:上面的散列将以这种方式排序:[["key1",1000],["key3",500
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决