如何在悬停的 <li> 旁边制作线条幻灯片?
How to make a line slide beside a hovered <li>?
这里我添加了伪class 到 li on hover 它的不透明度 1。当我悬停时 :after 正在褪色 我怎样才能让它看起来像在直线上移动而不褪色。
ul {
list-style-type: none;
}
li {
padding: 30px;
position: relative;
}
li:after {
content: '';
position: absolute;
top: 0;
width: 3px;
height: 20px;
background: red;
opacity: 0;
transition: all 700ms cubic-bezier(0.155, 0.930, 0.430, 0.990);
}
li:hover:after {
opacity: 1;
transform: translatey(30px);
}
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
它需要 js 才能满足您的需求。你给的例子用的是jquery,我写的是纯js的版本
该行不是 li::after 而是父级的 ul::after,这样做是为了让我们可以获得 offsetTop 和 offsetHeight 并应用相对于父级的样式更改
let root = document.documentElement.style
function magicline(item) {
root.setProperty('--navlinetop', `${item.offsetTop}px`)
root.setProperty('--navlineheight', `${item.offsetHeight}px`)
}
function initiatelist() {
let listItems = document.querySelectorAll('li')
for (i = 0; i < listItems.length; i++) {
listItems[i].addEventListener('mouseover', function(event) {
magicline(event.target)
})
}
}
initiatelist()
:root {
--navlinetop: 0px;
--navlineheight: 0px;
}
ul {
position: relative;
padding: .5em;
top: 0;
width: 10ch;
list-style-type: none;
pointer-events: none;
}
li {
pointer-events: auto;
cursor: pointer;
}
ul:hover::after {
position: absolute;
display: block;
content: '';
right: -5px;
top: var(--navlinetop);
height: var(--navlineheight);
width: 3px;
background: #fa4;
transition: top .3s, height .3s
}
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
这里我添加了伪class 到 li on hover 它的不透明度 1。当我悬停时 :after 正在褪色 我怎样才能让它看起来像在直线上移动而不褪色。
ul {
list-style-type: none;
}
li {
padding: 30px;
position: relative;
}
li:after {
content: '';
position: absolute;
top: 0;
width: 3px;
height: 20px;
background: red;
opacity: 0;
transition: all 700ms cubic-bezier(0.155, 0.930, 0.430, 0.990);
}
li:hover:after {
opacity: 1;
transform: translatey(30px);
}
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
它需要 js 才能满足您的需求。你给的例子用的是jquery,我写的是纯js的版本
该行不是 li::after 而是父级的 ul::after,这样做是为了让我们可以获得 offsetTop 和 offsetHeight 并应用相对于父级的样式更改
let root = document.documentElement.style
function magicline(item) {
root.setProperty('--navlinetop', `${item.offsetTop}px`)
root.setProperty('--navlineheight', `${item.offsetHeight}px`)
}
function initiatelist() {
let listItems = document.querySelectorAll('li')
for (i = 0; i < listItems.length; i++) {
listItems[i].addEventListener('mouseover', function(event) {
magicline(event.target)
})
}
}
initiatelist()
:root {
--navlinetop: 0px;
--navlineheight: 0px;
}
ul {
position: relative;
padding: .5em;
top: 0;
width: 10ch;
list-style-type: none;
pointer-events: none;
}
li {
pointer-events: auto;
cursor: pointer;
}
ul:hover::after {
position: absolute;
display: block;
content: '';
right: -5px;
top: var(--navlinetop);
height: var(--navlineheight);
width: 3px;
background: #fa4;
transition: top .3s, height .3s
}
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>