javascript - CSS焦点轮廓没有被焦点可见的polyfill删除[NextJS]
问题描述
我正在使用focus-visible polyfill,这样可点击元素上的鼠标事件就button
不会触发焦点轮廓。
但是在 NextJS(服务器端渲染框架)上,单击按钮元素时仍会出现焦点轮廓。我已经在 create-react-app 等客户端框架中使用过这个库,我没有遇到任何问题。
_app.js
focus-visible 按页面加载
import "focus-visible";
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
export default MyApp;
尝试在页面内加载焦点可见_document.js
,没有任何区别。
两个演示使用的 css。
// removes outline when clicking
.js-focus-visible :focus:not(.focus-visible) {
outline: none;
}
button {
display: block;
cursor: pointer;
border: none;
background: #ccc;
margin: 10px 0;
}
// displays when focusing with keyboard
button.focus-visible {
color: red;
outline: 1px solid red;
}
解决方案
问题不在于 NextJS,而在于范围 CSS 库styled-jsx。
解决方案是使用一次性全局选择器。
由于某种原因,使用全局样式失败,但使用一次性全局选择器可以。
全局样式失败
<style jsx global>{`
.js-focus-visible :focus:not(.focus-visible) {
outline: none;
}
`}</style>
但是一次性全局选择器有效
<style jsx>{`
:global(.js-focus-visible) :focus:not(.focus-visible) {
outline: none;
}
`}</style>
推荐阅读
- spring-boot - 以编程方式从 ApplicationContextRunner 激活 @EnableConfigurationProperties
- android - Photoview 禁用缩小图像
- java - JTextArea 的文本可以看起来像控制台吗?
- .net - 使用 Entity Framework Core 和迁移的微服务中的实体关系
- oauth-2.0 - WebAPI2 中基于令牌的安全性是无状态的吗?
- svg - 为什么 viewBox 会影响我的非缩放笔画?
- lua - 在LUA(Corona SDK)中比较第一次点击的价值和第二次点击的价值
- vue.js - Vue
在孩子里面 组件不更新父组件 - azure - 替换 Azure 资源组中不同资源的一个标记
- javascript - 如何从 HTML 中的 md-switch 存储和修改 JS 变量?