在 jQuery 的 css() 函数中使用 !important
我有一个带有如下声明的覆盖层的对话框:
.ui-widget-overlay {
position: absolute;
left: 8px;
top: 9px;
height: 985px !important;
width: 518px !important;
}
我的页面将有两个不同的页面高度。为了用覆盖层来解释这一点,我在我的 JS 文件中完成了这一点:
如果小一个可见:
$('.ui-widget-overlay').css("height", "985px !important");
否则
$('.ui-widget-overlay').css("height", "1167px !important");
显然这不起作用。还有另一种方法可以覆盖 !important
吗?
该页面可以来回切换,所以我总是需要其中之一。另外,如果我不向 css 添加 !important
,那么覆盖层的高度将无限扩展(它在 facebook 中,所以我假设那里存在问题)
有什么建议吗?
I have a dialog with an overlay declared like so:
.ui-widget-overlay {
position: absolute;
left: 8px;
top: 9px;
height: 985px !important;
width: 518px !important;
}
The page I have will have two different page heights. To account for this with the overlay I have done this in my JS file:
If small one visible:
$('.ui-widget-overlay').css("height", "985px !important");
else
$('.ui-widget-overlay').css("height", "1167px !important");
Apparently this does not work. Is there another way to over ride !important
that would?
The page can switch back and forth so I need to always have one or the other. Also if I do not add !important
to the css then the overlay will expand in height infinitely (its in facebook so i am assuming there is an issue there)
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
有一个技巧可以做到这一点。
cssText 在这里发挥了作用。它将 css 样式附加为字符串,而不是变量。
There is a trick to do this.
cssText is doing the trick here. It is appending css styles as string, not as variable.
不要将样式应用于类。将类作为样式应用到您的 div 中!
让 jQuery 为您完成所有工作
您的样式表中应该包含这些类
好的,您的 CSS
已经排序了,您的 div
现在您可以使用 jQuery 来操作您的 div,方法是附加到按钮/单击/悬停,无论您想使用什么
而且您不需要使用 !important - 当您开始遇到大型 CSS 文件或多个加载样式的问题时,才会真正使用 !important。
这是即时的,但您也可以添加效果
您可以像这样动态地将样式添加到您的页面 - 并将所有现有类替换为另一个类,我们可以使用 .attr('class', 'newClass') 代替。
但您不想使用此方法过度编写现有样式。这应该用在“丢失”的情况下。只是展示了 jQuery 的强大功能
Dont apply styles to a class. Apply a class to your div as a style!
Let jQuery do all the work for you
You style sheet should have these classes in them
Ok thats your CSS sorted
now your div
Now you can use jQuery to manipulate your divs either by attaching to a button/click/hover whatever it is you wanna use
And you dont need to use !important - that is really used when you start having issues with large CSS files or several loaded styles.
This is instant but you can also add an effect
You can add styles dynamically to your page like this- and to replace all existing classes with another class, we can use .attr('class', 'newClass') instead.
But you do not want to be over writing your existing styles using this method. This should be used in a 'lost' case scenario. Just demonstrates the power of jQuery
您可以尝试使用
$(this).attr('style', 'height:1167px !important');
我还没有测试过它,但它应该可以工作。You could try using
$(this).attr('style', 'height:1167px !important');
I haven't tested it, but it should work.您可以使用覆盖所需属性的规则创建动态样式表并将其应用到页面上。
现在,当您添加新创建的类时,它们将优先,因为它们是最后定义的。
演示位于 http://jsfiddle.net/gaby/qvRSs/
< strong>更新
对于 IE9 之前的支持,请使用
演示 http://jsfiddle.net/gaby/qvRSs/3/
You can create a dynamic stylesheet with rules that override the properties you want and apply it on the page.
Now, when you add our newly created classes, they will take precedence since they are the last defined.
demo at http://jsfiddle.net/gaby/qvRSs/
update
For pre-IE9 support use
demo at http://jsfiddle.net/gaby/qvRSs/3/
除非我误读了你的问题,否则你所做的确实可以在 jsfiddle 中工作。
编辑:我的小提琴仅适用于某些浏览器(到目前为止,Chrome:通过,IE8:失败)。
Unless I've misread your question, what you're doing does work in jsfiddle.
EDIT: My fiddle only works in some browsers (so far, Chrome: pass, IE8: fail).
我这样解决了这个问题:
所以没有内联样式丢失,最后一个覆盖第一个
I solved this problem like this:
So no inline-Style is lost, an the last overrides the first
请从类中删除 height 属性,然后尝试实现您的 if 和 else 条件。
享受代码......保持微笑......
Please remove height attribute from class and then try to implement your if and else condition.
Enjoy code....keep smiling...