CSS特异性节拍与一致!重要的
CSS specificity beat inline with !important
这是我的网站:http://stage.samkeddy.com/
它使用几个媒体查询和一个由javascript驱动的移动菜单按钮进行响应。
以下是菜单按钮的javascript:
function toggleMenu () {
if (menuIsVisible == false) {
collapsibleMenu.style.height = 'auto';
content.style.paddingTop = '290px';
menuIsVisible = true;
}
else {
collapsibleMenu.style.height = '0';
content.style.paddingTop = '80px';
menuIsVisible = false;
}
}
所以你可以看到,我需要调整内容div顶部的填充,以抵消菜单
但是,如果将大小调整为移动大小,打开菜单,然后将大小调整回桌面大小,则媒体查询不会修复填充,因为javascript仍然有内联样式。我试着在桌面版上做填充!重要的是,但调整大小时填充仍然不会改变,即使根据这个!重要节拍内联。
你可以自己测试,打开大小(应该是什么样子),调整到移动宽度(导航将消失,你会看到菜单按钮),点击菜单按钮(保持菜单打开),然后将网站调整回桌面宽度。你会看到填充物仍然存在。如果你检查它,你可以看到原来的填充被划掉了,有利于内联样式。
我知道用javascript监控宽度并设置填充可以做到这一点,但我真的不想这么做,也不认为我应该这么做。
EDIT:已解决
首先,我应该添加类,而不是用javascript添加CSS。
然后我假设推杆!媒体查询之外的重要内容将使其只显示在桌面上,但它接管了所有媒体查询。因此,只将其放入查询中就可以了。请注意,如果我使用两个单独的菜单(移动/桌面),我就不需要这个了,但由于它是固定的,#内容需要填充,所以必须这样做。但使用这种技术,你也可以只使用一个菜单,但可以用这种方式来调整菜单的高度。我已经用代码笔演示了这项技术:http://codepen.io/anon/pen/JFvay
将此代码添加到样式表中应该可以解决问题,我刚刚使用开发工具在您的网站上尝试过,它正在工作:
@media only screen and (min-width: 643.2px) {
#content {
padding-top: 80px !important;
}
}
尽管我强烈建议您为移动设备创建一个单独的导航菜单,并使用@media查询来显示它。
您的核心问题是混合了CSS和内联样式。一般来说,无论是在HTML中,还是通过使用element.style.<property> =
或通过jQuery的.css()
功能,都应避免将特定的CSS属性直接放置在元素上。相反,您应该使用类将您想要的属性定义为CSS规则:
#collapsible-menu { height: auto; }
#content { padding-top: 290px; }
#someelt.menu-visible #collapsible-menu { height: 0; }
#someelt.menu-visible #content { padding-top: 80px; }
其中CCD_ 3是某种更高级别的祖先元素。然后,你的JS就变成了
function toggleMenu() {
document.getElementById('someelt').classList.toggle('menu-visible');
}
如果您的目标浏览器不支持classList
(请参阅CanIUse),jQuery会提供自己版本的类切换。
CSS不是一种命令式语言,但如果你愿意,你可以把上面最后两条规则的#someelt.menu-visible
部分想象成一种if
语句:"如果菜单可见,则将collapsible-menu
缩小到零高度"等等,#someelt
的menu-visible
类的存在可以被认为是一种布尔"变量"。最有可能的是,您将不再需要JS中的相应变量。
不管怎样,这样做的好处是,查看代码的人只需查看CSS文件,就可以看到所有与CSS相关的逻辑,而不必同时查看CSS和JS,并且您可以在一个地方更改与CSS有关的内容。
- 当一个重要的构造函数参数丢失时应该发生什么
- ajax显示隐藏滚动到最重要的问题
- 试图把注意力集中在一个不重要的元素上是不是一种糟糕的做法;不存在
- 为什么JSON对象序列化是需要的或重要的发送ajax调用到服务器
- 我可以用添加css吗!重要的是,只使用jquery
- ng样式在与的预标记中!重要的是不能工作
- 如何将显示属性设置为与内联!重要的
- 为什么这个重要的 CSS 值被覆盖了
- 在只有唯一性很重要的情况下,描述性句子可以与JavaScript常量一起使用吗
- 从web浏览器(最重要的是IE)来看,JS执行本地命令最可靠的方法是什么
- .removeClass()未删除类.可能的特异性错误
- CSS特异性节拍与一致!重要的
- 重写/删除内联!重要的
- 样式更改后禁用悬停:重要的是不要'不起作用
- 如何添加重要的位置:绝对使用jQuery.css()函数
- 用于替换字符串中小数后不重要的零的正则表达式模式
- 最重要的支柱.查看delegateEvents以便事件对象可以包含移动事件
- “重要”的意义是什么?在es6中
- 使用promise进行多个异步调用,其中只有少数是真正重要的
- 如何隐藏使用!重要的CSS背景图像