我正在尝试创建一个菜单,我用CSS网格布局。我遇到的问题是,当鼠标悬停在每个菜单项上时,如何使菜单交互。
我希望当鼠标停留在一行中的任何菜单项上时能够高亮显示整行,我可以通过添加一个:hover css规则来高亮显示每个单独的网格单元格,但是我不知道如何高亮显示整行网格。
第二部分是检测行何时被点击。同样,我可以为每个单元格添加一个onClick事件处理程序,但这似乎并不理想,因为用户可能会不小心点击网格单元格之间的间隙。我在想,如果我能弄清楚如何高亮显示整行,那么我可以为该行高亮显示器添加单击处理程序,这样就可以解决间隙点击问题。
我创建了一个codepen示例,演示了当前菜单的构造方式:https://codepen.io/marekKnows_com/pen/RqMgGw
超文本:
<div class="myGrid">
<div class="anchor" id="item1">
<i class="image material-icons">folder_open</i>
</div>
<span class="text">Open...</span>
<span class="shortcut">Ctrl+O</span>
<div class="anchor" id="item2">
<i class="image material-icons">save</i>
</div>
<span class="text">Save...</span>
<span class="shortcut">Ctrl+S</span>
<div class="anchor" id="item3"></div>
<span class="text">Action</span>
<div class="separator"></div>
<div class="anchor" id="item4"></div>
<span class="text">Exit</span>
<span class="shortcut">Ctrl+X</span>
</div>
CSS:
.myGrid {
border: 1px solid black;
display: grid;
grid-template-columns: 20px auto auto;
grid-gap: 2px 6px;
align-items: center;
justify-items: start;
padding: 10px;
box-sizing: border-box;
}
.image {
width: 24px;
}
.text {
height: 28px;
line-height: 28px
}
.shortcut {
justify-self: end;
padding: 0 5px;
height: 28px;
line-height: 28px
}
.separator {
grid-column: 1 / span 3;
width: 100%;
height: 3px;
border-bottom: 1px solid lightgray;
}
4条答案
按热度按时间bvk5enib1#
一种选择是用div Package row元素,在 Package 器div中包含样式
display: contents;
,将click处理程序添加到 Package 器div中。CSS网格在布局内容时会将 Package 器内的元素视为没有 Package 器,因此它们会根据您的需要对齐。请参阅MDN display-box了解更多信息。该链接还指出了浏览器在
display: contents;
方面存在辅助功能错误。display: contents;
不允许样式。要突出显示整个网格行,您需要使用其他CSS技术。这个 Package 器div可以用在CSS选择器中。到目前为止,我只使用Firefox进行了测试。
zysjyyx42#
我终于让它工作了。我最终做的是使锚元素具有相对位置。然后我在锚元素下添加了一个具有绝对位置的新div。在JavaScript中,我可以将新元素的大小调整为网格的全宽,并使用z-index相应地定位它相对于行中其他元素的位置。
djp7away3#
首先,您可能需要更改html,以便
.anchor
元素 Package 每个条目。然后使用flex对齐每个项目的内容
https://codepen.io/anon/pen/xQWLaE
ljsrvy3e4#
检查这个如果它工作在悬停item1它将改变边界颜色(从黑色到红色作为突出显示)