草庐IT

javascript - !important 规则可以用在 IE 的 CSS 表达式中吗?

coder 2024-07-15 原文

首先,我知道 CSS 表达式在很多方面都已失效和错误,并且尽可能避免使用 !important。这是一个 special case stylesheet .

简而言之

我的问题是...有没有办法让 CSS 表达式设置 !important 标志?

例如这不起作用:

a { color:expression('red !important'); }

[编辑:感谢 MarmaladeToday 在下面的评论]。 这也行不通:

a { color:expression('red') !important; }

这可以通过其他方式完成吗?


详细说明

我实际上想做的是模仿 IE6 和 7 中的 inherit 值。这有效:

color:expression(
    this.parentNode.currentStyle ?
        this.parentNode.currentStyle.color: 'red'
    );

但我还想设置 !important 标志,这不起作用:

color:expression(
  (
    this.parentNode.currentStyle ?
        this.parentNode.currentStyle.color: 'red'
  ) + ' !important');

我知道,在 JavaScript 中,不可能通过元素的 style 对象设置 !important。例如。 这行不通:

element.style.color = 'red !important';

但是,可以通过元素的style属性设置!important:

element.setAttribute('style', 'color:red !important;');

那么... CSS 表达式是否仅限于与 style 对象交互,因此,我想要实现的目标是不可能的 - 或者表达式是否有任何方法可以影响元素的属性,或者以其他方式传递 !important


开始赏金

到目前为止还没有可靠的答案,所以我开始悬赏。

理想情况下,我正在寻找一种基于 CSS 的解决方案来模仿 IE6 和 IE7 中的 inherit !important,无论是否使用 CSS 表达式。 (请务必在发布前验证您的建议是否有效)。

至少,一些权威引用的链接告诉我这是不可能的,这意味着我可以放下这个思路 - 我没有看到任何提及使用 !important< 的="" css=""> 规则。

最佳答案

那些 CSS 表达式不起作用的原因是因为 IE 只计算级联中最后一个属性的表达式。

例如如果您有一个 HTML 文档,里面有一个链接和下面的“CSS”,

a {
    color: expression(function(e){
        alert('success');
        e.runtimeStyle.color = 'blue';
    }(this));
}
a { color: red; }

您永远不会看到该警报(不要介意样式更改),因为永远不会评估 CSS 表达式。所以不,您不能使用表达式来设置 !important 标志。

也就是说,当您尝试在同一个属性上设置它时不会。你可以作弊。但这确实使表达式有点复杂:

a {
    filter: expression(function(e){
        e.runtimeStyle.color = 'blue';
        alert('success');
        e.style.filter = '';
    }(this));
}
a { color: red; }

这里有几点需要注意。

如果您只是使用另一个 CSS 属性,您可以确定表达式 被计算。或者至少,更确定一点,因为如果在级联的下方还有另一个规则已经使用了相同的属性,那么您仍然不走运。

其次,你必须使用runtimeStyle而不是 currentStyle .如果您在此处使用 currentStyle,第二条规则最终仍会覆盖它。 runtimeStyle 覆盖所有其他 CSS(!important 声明除外)。所以它是 !important 的 JScript 等价物。

另请注意,我也在重置 filter 属性本身。这可以防止不断重新评估表达式。但尽管这可能会降低性能,但我认为这并不是非常关键。我把它放在这里的主要原因是因为我在这些表达式中添加了 alert(),而您肯定不想让它们永远弹出。 p>

实际上也可以使用您编写的任何其他属性。这也适用:

a {
    bogus: expression(function(e){
        e.runtimeStyle.color = 'blue';
    }(this));
}

但是,由于 bogus 属性实际上并不存在,您无法使用 Javascript 重置它,所以这个不断地重新计算。

关于javascript - !important 规则可以用在 IE 的 CSS 表达式中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577366/

有关javascript - !important 规则可以用在 IE 的 CSS 表达式中吗?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - capybara field.has_css?匹配器 - 2

    我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No

  5. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  6. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  7. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  8. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  9. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  10. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

随机推荐