当显示jquery确认对话框时,页面上的滚动条消失,这会导致页面向右跳转。对话的JavaScript代码如下:
<script src="vendor/jquery-confirm.min.js"></script>
<link href="vendor/jquery-confirm.min.css" rel="stylesheet" type="text/css">
<script>
function confirmDialog(content, func, parameter) {
$.confirm({
title: "",
content: content,
confirmButton: "Yes",
cancelButton: "No",
theme: "black",
confirm: function() { func(parameter); },
cancel: function() { }
});
}
</script>
我正在使用CSS:
body {
overflow-y: scroll;
}
如何防止这种情况发生?
更新
我尝试添加“重要”,但在Firefox中检查页面我看到有这个CSS:
body.jconfirm-noscroll {
overflow: hidden !important;
}
还有一条直线:
overflow-y: scroll !important;
答案 0 :(得分:3)
CSS是数学。每个选择器归结为特异性数字。如果数字相等,则应用最后一个。如果它们不相等,则无论订单如何,最高都适用。
您可以尝试使用specificity calculator等工具将选择器与特定数字相关联,但实际上,您并不需要。
一般要点是:
Main.main.callMe();
您尝试覆盖的选择器是:
!important > style="inline rules" > #id > .class > attribute = element
这意味着body.jconfirm-noscroll {
some rule !important;
}
。只要您的页面位于页面下方(稍后由浏览器解析),您就可以使用相同的选择器覆盖它。
或者,为确保您可以使用
覆盖它!important + 1 x class + 1 x element
或者,当然,如果您知道身体上有任何其他课程,请将其添加到选择器。或者在html body.jconfirm-noscroll {
some rule !important;
}
上加#id
并使用它。它将击败<body>
。但是你不能用.class
击败body.class !important
。这是肯定的。
重要说明: 有些情况下您绝对肯定您的选择器更强,但仍然拒绝申请。不要绝望。它发生在我们所有人身上。根据经验,它在任何一种情况下都会失败:
body !important
属性中)实际上强于style
s。这就是为什么通过#id
应用的样式通常适用的原因。他们不会覆盖javascript
,但!important
标签和类似答案 1 :(得分:1)
覆盖CSS可能很棘手......
你可以尝试
body, body.jconfirm-noscroll {
overflow: auto!important;
}
但那仍然可能不起作用......
如果没有,请在您的身体上添加一个课程,例如<body class"please-scroll">
并尝试此
body.please-scroll, body.please-scroll.jconfirm-noscroll {
overflow: auto!important;
}
我不确定它是否有用,试一试让我知道,我感兴趣!