无法关闭显示设置为网格的 <dialog> 元素
Cannot close <dialog> element with display set to grid
当对话框的 display
样式设置为 grid
.
时,HtmlDialogElement.close() 函数似乎对 <dialog>
元素没有影响
有没有人碰巧知道为什么?请注意,删除 display: grid
可使对话框正常运行。我在 Chrome 和 Firefox 的最新版本上都看到了这种行为。
请参阅下面的最小复制。如果您愿意,这里有一个代码笔:https://codepen.io/ChristianMay/pen/MWrmdzJ
let dialog = document.querySelector('dialog')
let closeButton = document.querySelector("#dialog-close");
closeButton.addEventListener('click', () => {
dialog.close();
})
dialog {
display: grid;
}
<dialog class="dialog" open="">
Test
</dialog>
<button id="dialog-close">Close dialog</button>
如果属性 open
存在,则对话框被视为打开(或显示)。
一旦该属性不存在,对话框就会被隐藏。我想将显示设置为网格会覆盖对话框的默认样式,只要 open
被删除,它就会隐藏对话框。我们可以通过在没有 open
属性的情况下向对话框添加样式来恢复此行为。
let dialog = document.querySelector('dialog')
let closeButton = document.querySelector("#dialog-close");
closeButton.addEventListener('click', () => {
dialog.close();
})
dialog:not([open]){
display:none;
}
dialog{
display:grid;
}
<dialog class="dialog" open="">
Test
</dialog>
<button id="dialog-close">Close dialog</button>
已经回答,但您也可以将 <dialog>
显示为网格,前提是它是 opened 对话框;)
dialog[open] {
display: grid;
}
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
The CSS attribute selector matches elements based on the presence or value of a given attribute.
使用 CSS 属性选择器的演示代码段
const dialog = document.querySelector('dialog')
let closeButton = document.querySelector("#dialog-close");
closeButton.addEventListener('click', () => {
dialog.removeAttribute("open");
})
let openButton = document.querySelector("#dialog-open");
openButton.addEventListener('click', () => {
dialog.setAttribute("open", "");
})
dialog[open] {
display: grid;
}
<dialog class="dialog" open="">
Test
</dialog>
<button id="dialog-close">Close dialog</button>
<button id="dialog-open">Open dialog</button>
当对话框的 display
样式设置为 grid
.
<dialog>
元素没有影响
有没有人碰巧知道为什么?请注意,删除 display: grid
可使对话框正常运行。我在 Chrome 和 Firefox 的最新版本上都看到了这种行为。
请参阅下面的最小复制。如果您愿意,这里有一个代码笔:https://codepen.io/ChristianMay/pen/MWrmdzJ
let dialog = document.querySelector('dialog')
let closeButton = document.querySelector("#dialog-close");
closeButton.addEventListener('click', () => {
dialog.close();
})
dialog {
display: grid;
}
<dialog class="dialog" open="">
Test
</dialog>
<button id="dialog-close">Close dialog</button>
如果属性 open
存在,则对话框被视为打开(或显示)。
一旦该属性不存在,对话框就会被隐藏。我想将显示设置为网格会覆盖对话框的默认样式,只要 open
被删除,它就会隐藏对话框。我们可以通过在没有 open
属性的情况下向对话框添加样式来恢复此行为。
let dialog = document.querySelector('dialog')
let closeButton = document.querySelector("#dialog-close");
closeButton.addEventListener('click', () => {
dialog.close();
})
dialog:not([open]){
display:none;
}
dialog{
display:grid;
}
<dialog class="dialog" open="">
Test
</dialog>
<button id="dialog-close">Close dialog</button>
已经回答,但您也可以将 <dialog>
显示为网格,前提是它是 opened 对话框;)
dialog[open] {
display: grid;
}
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
The CSS attribute selector matches elements based on the presence or value of a given attribute.
使用 CSS 属性选择器的演示代码段
const dialog = document.querySelector('dialog')
let closeButton = document.querySelector("#dialog-close");
closeButton.addEventListener('click', () => {
dialog.removeAttribute("open");
})
let openButton = document.querySelector("#dialog-open");
openButton.addEventListener('click', () => {
dialog.setAttribute("open", "");
})
dialog[open] {
display: grid;
}
<dialog class="dialog" open="">
Test
</dialog>
<button id="dialog-close">Close dialog</button>
<button id="dialog-open">Open dialog</button>