【发布时间】:2017-04-20 03:40:01
【问题描述】:
在下面的简单示例中,我想让纯蓝色 div 在鼠标悬停时增长,但只要光标在橙色框内,就保持这种状态。
一旦光标离开橙色框,实心蓝色框应折叠。橙色框代表列表中的一行。
真正的实现是在充满其他细节的复杂行上的类似工具提示的滑出。
.row {
border: 1px solid orange;
display: block;
height: 20%;
padding: 20px;
width: 400px;
}
.row div {
border: 1px dashed blue;
display: inline-block;
text-align: center;
padding: 20px;
width: 100px;
}
.row .right {
background: blue;
padding: 20px 0;
transition: width 0.5s ease;
width: 10px;
}
.row .right:hover {
width: 100px;
}
<div class="row">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
当然,这可以通过 JavaScript 轻松完成(目前是这样实现的):
let right = $('.right');
right.mouseenter(() => right.addClass('hover'))
$('.row').mouseleave(() => right.removeClass('hover'))
.row {
border: 1px solid orange;
display: block;
height: 20%;
padding: 20px;
width: 400px;
}
.row div {
border: 1px dashed blue;
display: inline-block;
text-align: center;
padding: 20px;
width: 100px;
}
.row .right {
background: blue;
padding: 20px 0;
transition: width 0.5s ease;
width: 10px;
}
.row .right.hover {
width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
但如果可能的话,出于代码可读性、性能和可维护性的原因,我希望使用纯 CSS 方法。
如果事实上不可能,我会接受它作为答案。
当前的实现是在一个 Angular4 模板中,所以我们需要在模板中添加像 (mouseleave)="tooltipElement && hideTooltip($event.target.children) 这样的指令,这对我来说似乎是不必要的。
【问题讨论】:
标签: css css-selectors