首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未使用焦点删除CSS焦点轮廓-可见多边形填充[NextJS]

问未使用焦点删除CSS焦点轮廓-可见多边形填充[NextJS]
EN

Stack Overflow用户
提问于 2020-06-24 01:02:54
回答 2查看 1.3K关注 0票数 0

我使用的是focus-visible polyfill,这样可点击元素(如button )上的鼠标事件不会触发焦点轮廓。

然而,在服务器端渲染框架NextJS上,当单击按钮元素时,焦点轮廓仍然会出现。我已经在客户端框架中使用过这个库,比如create-react-app,我没有遇到任何问题。

focus-visible由_app.js页面加载

代码语言:javascript
复制
import "focus-visible";

function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />;
}

export default MyApp;

尝试加载焦点-在_document.js页面内可见,没有什么不同。

两个演示使用的css。

代码语言:javascript
复制
// 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;
}

Demo: focus-visible removes outline on create-react-app upon clicking

​

​

Demo: focus-visible fails to remove outline on NextJS upon clicking

​

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-24 13:31:33

问题不在于NextJS,而在于限定了作用域的CSS库styled-jsx。

解决方案是使用一次性全局选择器。

由于某些原因,使用全局样式失败,但使用一次性全局选择器工作。

全局样式失败

代码语言:javascript
复制
<style jsx global>{`
  .js-focus-visible :focus:not(.focus-visible) {
    outline: none;
  }
`}</style>

但是一次性的全局选择器是有效的

代码语言:javascript
复制
<style jsx>{`
  :global(.js-focus-visible) :focus:not(.focus-visible) {
    outline: none;
  }
`}</style>
票数 0
EN

Stack Overflow用户

发布于 2020-06-24 01:36:41

使用<a href="abc.com" class="abc">而不是<button>

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62540071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档