TailwindCSS 组内的链接:焦点元素失败,因为单击事件被阻止

Posted

技术标签:

【中文标题】TailwindCSS 组内的链接:焦点元素失败,因为单击事件被阻止【英文标题】:Link inside a TailwindCSS group:focus element fails as click event prevented 【发布时间】:2021-06-04 04:59:58 【问题描述】:

我有一个常见问题解答部分,其中包含手风琴类型的弹出部分,全部使用 TailwindCSS(即没有 javascript)。打开部分内的链接不起作用(它们只是在问题失去焦点时关闭常见问题解答)。

有谁知道如何在失去焦点之前触发链接事件?

这是一个演示问题的简单示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test TailwindCSS Group:Focus</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link href="tailwind.css" rel="stylesheet">
    <style>
        /* ----- ACCORDION ----- */
        .group:focus .group-focus\:max-h-screen 
            max-height: 100vh;
        
        .group:focus .group-focus\:text-white 
            --text-opacity: 1;
            color: #02455a; /*petrol_blue*/
            color: rgba(255, 255, 255, var(--text-opacity));
        

        .group:focus .group-focus\:-rotate-90 
            --transform-rotate: -90deg;
        
    </style>
</head>
<body>

<div class="group" tabindex="1">
    <div class="group flex justify-between px-4 py-2 items-center transition cursor-pointer pr-10 relative">
        <div class="h-8 w-8 items-center inline-flex justify-center rotate-180 transform transition group-focus:-rotate-90 absolute top-0 left-0 mb-auto ml-auto mt-2 mr-2">
            <svg fill="#02455a" height='100px' width='100px' xmlns="http://www.w3.org/2000/svg"
                 viewBox="0 0 847 847" x="0px" y="0px">
                <g><polygon points="670,584 423,263 176,584 "></polygon></g></svg>
        </div>
        <div class="transition pl-4  hover:opacity-50">Question</div>
    </div>
    <div class="group-focus:max-h-screen max-h-0 px-4 overflow-hidden">
        <p class="pl-4 pr-4 pt-0 pb-2">Answer: <a href="https://***.com">Stack Overflow</a></p>
    </div>
</div>


</body>
</html>

tailwind.css 正在使用:

npx tailwindcss-cli@latest build -o tailwind.css

(顺便说一句,我意识到 svg 箭头本身并没有表现出来,但这是另一个问题......)

【问题讨论】:

【参考方案1】:

除了您的group-focus:max-h-screen,您还可以添加focus-within:max-h-screen,以便在锚获得焦点时保持最大高度。

要修复箭头动画,只需在 CSS 中将 --transform-rotate 替换为 --tw-rotate

.group:focus .group-focus\:max-h-screen 
  max-height: 100vh;


.group:focus .group-focus\:text-white 
  --text-opacity: 1;
  color: #02455a;


.group:focus .group-focus\:-rotate-90 
  --tw-rotate: 90deg;


.focus-within\:max-h-screen:focus-within 
  max-height: 100vh;
<link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">

<div class="group" tabindex="1">
  <div class="group flex justify-between px-4 py-2 items-center transition cursor-pointer pr-10 relative">
    <div class="h-8 w-8 items-center inline-flex justify-center rotate-180 transform transition group-focus:-rotate-90 absolute top-0 left-0 mb-auto ml-auto mt-2 mr-2">
      <svg fill="#02455a"   xmlns="http://www.w3.org/2000/svg" viewBox="0 0 847 847" x="0px" y="0px">
        <g><polygon points="670,584 423,263 176,584 "></polygon></g>
      </svg>
    </div>
    <div class="transition pl-4 hover:opacity-50">Question</div>
  </div>
  <div class="group-focus:max-h-screen focus-within:max-h-screen max-h-0 px-4 overflow-hidden">
    <p class="pl-4 pr-4 pt-0 pb-2">Answer: <a href="https://***.com">Stack Overflow</a></p>
  </div>
</div>

【讨论】:

以上是关于TailwindCSS 组内的链接:焦点元素失败,因为单击事件被阻止的主要内容,如果未能解决你的问题,请参考以下文章

在numpy中标记组内的元素

如何内联输入组内的元素(强制它们在一行上)

2607. 使子数组元素和相等

是否可以将焦点应用于我的 React 组件之一内的输入元素,而无需直接将 ref 分配给输入标签?

我可以将新值分配/移动到元组内的 unique_ptr 中吗?

如何使用 TailwindCSS 在 div 中创建全高元素 [重复]