将鼠标悬停在特定 <li> 上时如何更改 <ul> 背景图像? [复制]

Posted

技术标签:

【中文标题】将鼠标悬停在特定 <li> 上时如何更改 <ul> 背景图像? [复制]【英文标题】:How to change <ul> background image while hover on a specific <li>? [duplicate] 【发布时间】:2021-01-17 12:58:33 【问题描述】:

我知道 'li' 它是父 'ul' 的孩子,所以我们不能仅使用 CSS3 来实现它,或者有可能吗?我可以添加 javascript,但我不能更改 html,因为它是由 php 生成的。 用这个简单的例子:

#containerwidth: 500px;
  min-height: 300px;
  background: url("https://cdn.pixabay.com/photo/2016/03/09/11/44/network-1246209_960_720.jpg");
ullist-style: none
a  text-decoration: none;
color: white;
font-size: 32px;
a:hover  text-decoration: none;
color: Chartreuse;
font-size: 32px;
lipadding-top: 1em;

/* url("https://cdn.pixabay.com/photo/2016/08/12/14/25/abstract-1588720_1280.jpg")
  
url("https://cdn.pixabay.com/photo/2015/01/12/17/40/padlock-597495_960_720.jpg")
  
  url("https://cdn.pixabay.com/photo/2016/01/14/05/51/rj45-1139366_960_720.jpg")
  
  */
<ul id="container">
  <li id="option1">
    <a href="#">Number 1</a>
  </li>
  <li id="option2">
    <a href="#">Number 2</a>
  </li>
  <li id="option3">
    <a href="#">Number 3</a>
  </li>
</ul> 

当我将鼠标悬停在“数字 1”上时,我想要 ul 背景是这样的图像:

url("https://cdn.pixabay.com/photo/2016/08/12/14/25/abstract-1588720_1280.jpg")

悬停“数字 2”我想要这张 ul 背景图片:

url("https://cdn.pixabay.com/photo/2015/01/12/17/40/padlock-597495_960_720.jpg")

最后,当我将鼠标悬停在“数字 3”上时,这张图片对应的 ul 背景发生了变化:

url("https://cdn.pixabay.com/photo/2016/01/14/05/51/rj45-1139366_960_720.jpg")

谢谢

【问题讨论】:

需要JavaScript 来自副本:***.com/a/39375149/8620333 【参考方案1】:

目前您无法使用 CSS 更改父级。您可以更改兄弟姐妹。

#container 
  width: 500px;
  position: relative;
  min-height: 300px;


ul 
  list-style: none


a 
  text-decoration: none;
  color: white;
  font-size: 32px;


a:hover 
  text-decoration: none;
  color: Chartreuse;
  font-size: 32px;


li 
  padding-top: 1em;


.bg 
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
  background: url("https://cdn.pixabay.com/photo/2016/03/09/11/44/network-1246209_960_720.jpg");
  transition: background-image 0.3s ease-in-out;


#option1:hover~.bg 
  background: url("https://cdn.pixabay.com/photo/2016/08/12/14/25/abstract-1588720_1280.jpg");


#option2:hover~.bg 
  background: url("https://cdn.pixabay.com/photo/2015/01/12/17/40/padlock-597495_960_720.jpg");


#option3:hover~.bg 
  background: url("https://cdn.pixabay.com/photo/2016/01/14/05/51/rj45-1139366_960_720.jpg");
<ul id="container">
  <li id="option1">
    <a href="#">Number 1</a>
  </li>
  <li id="option2">
    <a href="#">Number 2</a>
  </li>
  <li id="option3">
    <a href="#">Number 3</a>
  </li>
  <li class="bg"></li>
</ul>

如果你想和父母一起保存,你需要使用 JavaScript。

var ul = document.querySelector("#container");

function toggleIt(event) 
  const onOff = event.type === 'mouseenter';
  var li = event.currentTarget;
  var cls = li.dataset.bg;
  console.log(onOff, cls);
  ul.classList.toggle(cls, onOff);


var lis = document.querySelectorAll("ul li")
lis.forEach(function(li) 
  li.addEventListener("mouseenter", toggleIt);
  li.addEventListener("mouseleave", toggleIt);
);
#container 
  width: 500px;
  min-height: 300px;
  background: url("https://cdn.pixabay.com/photo/2016/03/09/11/44/network-1246209_960_720.jpg");
  transition: background-image 0.3s ease-in-out;


ul 
  list-style: none


a 
  text-decoration: none;
  color: white;
  font-size: 32px;


a:hover 
  text-decoration: none;
  color: Chartreuse;
  font-size: 32px;


li 
  padding-top: 1em;


#container.bg1 
  background-image: url("https://cdn.pixabay.com/photo/2016/08/12/14/25/abstract-1588720_1280.jpg");


#container.bg2 
  background-image: url("https://cdn.pixabay.com/photo/2015/01/12/17/40/padlock-597495_960_720.jpg");


#container.bg3 
  background-image: url("https://cdn.pixabay.com/photo/2016/01/14/05/51/rj45-1139366_960_720.jpg");
<ul id="container">
  <li id="option1" data-bg="bg1">
    <a href="#">Number 1</a>
  </li>
  <li id="option2" data-bg="bg2">
    <a href="#">Number 2</a>
  </li>
  <li id="option3" data-bg="bg3">
    <a href="#">Number 3</a>
  </li>
</ul>

因为你说你不想改变任何东西,所以使用 ids

var ul = document.querySelector("#container");

function toggleIt(event) 
  const onOff = event.type === 'mouseenter';
  var li = event.currentTarget;
  var cls = li.id;
  console.log(onOff, cls);
  ul.classList.toggle(cls, onOff);


var lis = document.querySelectorAll("ul li")
lis.forEach(function(li) 
  li.addEventListener("mouseenter", toggleIt);
  li.addEventListener("mouseleave", toggleIt);
);
#container 
  width: 500px;
  min-height: 300px;
  background: url("https://cdn.pixabay.com/photo/2016/03/09/11/44/network-1246209_960_720.jpg");
  transition: background-image 0.3s ease-in-out;


ul 
  list-style: none


a 
  text-decoration: none;
  color: white;
  font-size: 32px;


a:hover 
  text-decoration: none;
  color: Chartreuse;
  font-size: 32px;


li 
  padding-top: 1em;


#container.option1 
  background-image: url("https://cdn.pixabay.com/photo/2016/08/12/14/25/abstract-1588720_1280.jpg");


#container.option2 
  background-image: url("https://cdn.pixabay.com/photo/2015/01/12/17/40/padlock-597495_960_720.jpg");


#container.option3 
  background-image: url("https://cdn.pixabay.com/photo/2016/01/14/05/51/rj45-1139366_960_720.jpg");
<ul id="container">
  <li id="option1">
<a href="#">Number 1</a>
  </li>
  <li id="option2">
<a href="#">Number 2</a>
  </li>
  <li id="option3">
<a href="#">Number 3</a>
  </li>
</ul>

【讨论】:

同级 CSS 是个好主意!一个要记住的技巧。 两种解决方案都可以正常工作,但我希望它能够在没有任何 HTML 代码更改的情况下工作。因为这只是我正在构建的 Wordpress 网站的一个示例,我无法实施任何这些解决方案。我真的只需要改变父母(ul)的背景。 第二个无需更改即可工作,只需更改事件侦听器以不使用数据属性。相反,您需要读取 li 的 id 并更改图像。 我对 JavaScript 不是很熟悉。你能用没有数据属性的JS代码解释一下吗?我会很感激的。 已经有了

以上是关于将鼠标悬停在特定 <li> 上时如何更改 <ul> 背景图像? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标悬停在 li 上时如何更改所有字体颜色

当用户使用 JQuery 将鼠标悬停在链接上时如何显示图像

将鼠标悬停在列表上时更改列表中每个链接的颜色

下拉菜单 <li> 悬停改变背景图片

将鼠标悬停在 li 上时更改图像并使用 CSS 永久保存该图像

将鼠标悬停在上下文菜单上时如何更改 li 项的颜色