按 CSS 特异性排序

2024-01-12

我的主要目标是尝试根据特殊性重新排序 CSS 样式块。我之前曾帮助过SO https://stackoverflow.com/questions/10636340/order-css-based-on-selector-specificity我成功地实现了这个功能。See gist https://gist.github.com/2774085.

这是一个例子:

function specificity($selector){
// https://gist.github.com/2774085
}

$compare = function($a, $b) use ($specificity) {
    return $specificity($a) - $specificity($b)
};

$array = css_array();

uksort($array, $compare);

上面的代码一直运行良好,直到我遇到这个 CSS:

html, body, body div{
    background: transparent;
}
body {
    background-color: #D96F02;
}

这被重新排序为:

body { // 1 point
    background-color: #D96F02;
}
html, body, body div{ // 4 points
    background: transparent;
}

然而,这不是浏览器应用 CSS 的方式。

我认为我的特异性函数可能忽略了 CSS 顺序的重要性,而不是基于选择器特异性的排序?这是真的?

Update

我认为我应该做的是在我的比较函数中,我应该总是添加一个额外的点10因为特异性不仅仅基于选择器,它还基于选择器的顺序。所以像这样:

 $compare = function($a, $b) use ($specificity) {
        return ($specificity($a) + 10) - $specificity($b)
    };

这看起来怎么样?在这种情况下我如何确定要给出的分数!?


如果您序列化,问题就会消失

html, body, body div{ 
    background: transparent; 
} 

作为单独的规则,就好像它们是按以下方式编写的:

html{ 
    background: transparent; 
} 
body{ 
    background: transparent; 
} 
body div{ 
    background: transparent; 
} 

语义有点混乱 http://www.w3.org/TR/CSS2/syndata.html#rule-sets,但基本上您是根据已组合到同一规则集中的独立选择器来判断整个声明。

回复您的更新:特异性不受选择器顺序的影响 http://www.w3.org/TR/CSS21/cascade.html#specificity,即下面的规则具有相同的特殊性。最后一条规则优先渲染为蓝色 http://jsfiddle.net/ovfiddle/Cphhq/,除非你重新安排规则渲染为红色 http://jsfiddle.net/ovfiddle/Cphhq/1/:

<style>
    #container span {color:red;}
    div #content {color:blue;}
</style>

<div id="container"><span id="content">Hello world!</span></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按 CSS 特异性排序 的相关文章

  • 如何使用 php 发送服务器错误响应?

    一旦用户点击删除按钮我的 jQuery 脚本要求服务器删除所选项目 现在我想要我的php发送成功或错误响应的脚本 是否有可能触发错误回调万一该项目无法删除 Thanks 我的 jQuery 代码 ajax type post url myA
  • Flexbox 不适用于 iPad 和 Safari [重复]

    这个问题在这里已经有答案了 我在网站上使用 Flexbox 但它在 iPad Air iPad 3 和 Safari PC 上崩溃 设计和代码与此 codepen 类似 http codepen io anon pen xwJzEg htt
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 如何将背景图像仅应用于一个反应页面而不是整个应用程序?

    注册页面示例 register background image linear gradient to right ff5722 0 ff9800 100 margin top 150px important div div div div
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • 如何阻止破折号自行包裹?

    我有一个标题 标题最后一个单词的末尾是一个破折号 单词和破折号之间没有空格 当浏览器窗口变小时 破折号会中断并换成新行 在自己的行上有一个破折号是不好的排版 如何停止破折号之前的换行 以便最后一个单词运行到新行 这是代码 h1 XYZ co
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 无效的选择器:使用 Selenium 时不允许出现复合类名错误

    我正在尝试通过 Web Whatsapp 打印聊天中的一条消息 我可以通过 控制台 选项卡中的 Javascript 来完成此操作 我就是这样做的 recived msg document getElementsByClassName XE
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a
  • FireFox 中的“contenteditable = true”高度问题

    当有空的时候div with contenteditable true CSS contenteditable true border 1px dashed dedede padding 3px HTML div div 在 IE 和 Ch

随机推荐

  • 用于测试的 Java 编写的嵌入式 Kerberos 服务器

    有谁知道任何嵌入式 Kerberos 服务器 KDC KAdmin 它们是用 Java 编写的 并且可以仅在 JVM 进程中运行 例如 Hadoop minicluster 或嵌入式 LDAP 服务器 我的目标是让人们运行需要 Kerber
  • 当涉及到 pluck 时,to_sql 不起作用

    当我到to sql在以下查询中它工作正常 2 1 8 017 gt Task joins recurrence group recurrences id to sql gt SELECT tasks FROM tasks INNER JOI
  • XSLT:递归映射

    我是 XSLT 转换的新手 并且陷入了这种递归映射的困境
  • 如何强制两个 Java 线程在同一处理器/核心上运行?

    我想要一个不包含关键部分或类似同步替代方案的解决方案 我正在寻找类似于 Windows 中的 Fiber 用户级线程 的东西 操作系统管理哪些线程在哪个核心上处理 您需要将线程分配给操作系统中的单个核心 例如 在 Windows 上 打开任
  • 名词可数性

    有没有关于确定名词可数性的资源 要么用某种方法来解决这个问题 要么用一本字典来记录一个名词是否可数或不可数 我对这个名词是否可数不感兴趣 但更多的是它可能是可数的 例如 rice 可以变成rices 这意味着它可以是可数的 但在大多数情况下
  • 如何在MySql中打乱列

    在找不到任何符合我需求的内容后 我编写了这段代码来一致地对 mysql 中列的值进行洗牌 有一个更好的方法吗 Original table id fname 1 mike 2 ricky 3 jane 4 august 6 dave 9 J
  • 忽略 sapply 函数中的 NA

    我正在使用 R 并四处寻找答案 但虽然我看到过类似的问题 但它对我的具体问题不起作用 在我的数据集中 我尝试使用NA是作为占位符 因为一旦我完成部分分析 我就会返回到它们 因此 我希望能够进行所有计算 就好像NA并不真的在那里 这是我的示例
  • 谁能破解这个 Twitter 正则表达式?

    我想使用 PHP 获取所有主题标签http search twitter com search atom q 23eu jele C4 A1 C4 A1i http search twitter com search atom q 23eu
  • 动态获取vimeo视频的缩略图和标题

    从这个问题中摘取 从 Vimeo 获取 img 缩略图 https stackoverflow com questions 1361149 get img thumbnails from vimeo 我正在尝试创建一个包含多个 vimeo
  • Ionic run android 不在设备上运行应用程序

    我是 ionic 新手 我正在尝试在手机上运行 ionic 示例应用程序 三星Galaxy S4 而我无法这样做 我已经有了 USB Debugging 在开发者选项中打开 如上所示 即使我的手机已连接 它也可以在模拟器上运行 该应用程序在
  • Object.freeze() 不冻结传递对象中的对象有什么好处?

    我正在学习更多关于 JavaScript 的方法ObjectMDN 上的构造函数 我注意到最后一句Object freeze 的描述 https developer mozilla org en US docs Web JavaScript
  • 如何从Python字符串列表中删除numpy nan?

    我有一个字符串列表 x A B nan D 并想删除nan I tried x x numpy isnan x 但这仅在包含数字时才有效 对于 Python 3 中的字符串 我们如何解决这个问题 如果你有一个 numpy 数组 你可以简单地
  • 将 matplotlib.rcParams 字典正确重置为其原始默认值

    这个答案 https stackoverflow com a 40371037 3904031提到要么 fig plt figure fig patch set facecolor black or plt rcParams figure
  • 无法将“ViewController.Type”类型的值转换为预期的参数类型“UIViewController”

    我正在尝试制作一个警报控制器 如果答案是 好的 那么它将执行到 MapView 的 Segue 这是完整的代码 IBAction func teste sender Any Create the alert controller let a
  • 何时选择 REM 而不是 PX?

    什么时候应该使用 rem 而不是 px 我看到很多文章说我应该使用 REM 来尊重用户的偏好 但是这些例子总是说关于字体大小 而不是关于整个样式 边距 填充 边框 宽度 高度等 例如 我应该在 CSS 中使用 px 或 rem 值单位吗 h
  • kafka 0.9.0.1 无法启动并出现致命异常

    我看到删除和重建一些索引 发现它预期在0 9 0 1 但之后它失败了 说不安全的内存访问 对此有什么提示吗 2016 03 16 22 14 01 113 WARN Found a corrupted index file kafka da
  • Cocoapods:无法连接到 GitHub 来更新 CocoaPods/Specs 规范存储库

    跑步时pod repo update生成以下错误 Updating spec repo master Failed to connect to GitHub to update the CocoaPods Specs specs repo
  • 为什么从 /dev/stdin 读取时不寻找工作?

    我正在尝试使用seek使用以下代码 倒回 到文件的开头 usr bin perl use strict use warnings my infile ARGV 0 open FH lt infile while
  • 实体框架 4.1 - 非键列之间的关系

    我有 2 个相关的实体 但旧版 sql 模式本质上有同一个表的 2 个键列 不是 2 列键 见下文 我需要创建与 假键 列的关系 有没有办法在 Entity Framework 4 1 中以声明方式执行此操作 Public Class Cl
  • 按 CSS 特异性排序

    我的主要目标是尝试根据特殊性重新排序 CSS 样式块 我之前曾帮助过SO https stackoverflow com questions 10636340 order css based on selector specificity我