使用css将鼠标悬停在按钮上时如何更改站点背景图像?

Posted

技术标签:

【中文标题】使用css将鼠标悬停在按钮上时如何更改站点背景图像?【英文标题】:How can I change a sites background image when hovering over a button using css? 【发布时间】:2019-08-24 05:26:12 【问题描述】:

对于一个学校项目,我们需要使用 html、css 和 php 制作一个基本表单。我想在我的网站上添加一些有趣的东西,让它看起来更愉快。我要添加的一件事是页面的背景图像在悬停在按钮上时会发生变化。但是当我尝试添加它时,它根本什么都不做。 换句话说,我想通过将鼠标悬停在 knop 上将背景图像从“lamps.jpg”更改为“lamps1.jpg”。

请注意,我在 css 方面没有太多经验,所以我可能只是犯了一些愚蠢的错误。

我确实有一些其他悬停代码用于按钮执行它应该执行的操作。

自从我观看过大量使用文章的视频以来,我一直尝试将其放入文章中。并且还使用 :before 参数。两者都无济于事。

html
    font-family: 'Nunito', sans-serif;

body
    background-size: cover;
    color: white;
    letter-spacing: 0.5x;
    background-image: url("https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80");

input
   margin-left: 10%;

.text
    padding: 5px 15px;
    min-width: 200px;
    letter-spacing: 0.3px;

.knop
    padding: 8px 28px;
    border: #dcbc71 2px solid;
    background-color: transparent;
    color: #fff;
    -webkit-transition: border-radius 0.6s;

.knop:hover
    transition: 0.6s;
    border-radius: 10px;
    color: rgba(0, 0, 0, 0.5);
    background-color: #fcdd96;

fieldset
    border-radius: 25px;
    border: #dcbc71 2px solid;
    min-height: 600px;
<!DOCTYPE html> 
<html lang="nl"> 
	<head>
		<title>Enquete</title>
		<meta charset="utf-8"> 
		<link rel="stylesheet" href="enq.css">
		<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
		<script>
			$(".knop").hover(function()
  			$("body").css("background-image", "url('https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA4OC85MTEvb3JpZ2luYWwvZ29sZGVuLXJldHJpZXZlci1wdXBweS5qcGVn')");
  			, function()
  			$("body").css("background-image", "url('https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80')");
			);
		</script>
		<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
	</head>
	<body>
		<fieldset>
				<legend><h3>Vrijetijdsbesteding</h3></legend>
				<form name="form" method="post" action ="verstuur.php"> 
				<p> Welkom bij deze enquete over vrijetijdsbesteding. Vul het aub eerlijk in zodat wij de best mogelijke resultaten krijgen.
					<table>
					<tr><td>Stad*:</td><td><input type = "text"  name = "stad" placeholder="Stad" class="text" required></td></tr>					
					<tr><td>Leeftijd*:</td><td> <input list="leeftijden" name= "leeftijd" placeholder="Kies een leeftijd" class="text" required>
								<datalist id="leeftijden">
								<option value="0-13">
								<option value="13-18">
								<option value="19-25">
								<option value="26-35">
								<option value="36-45">
								<option value="46-55">
								<option value="56-65">
								<option value="65+">
								</datalist></td></tr>
					<tr><td>Hoeveel uur heb je gemiddeld in de week aan vrije tijd?</td>
								<td><input list="uren" name="uren" placeholder="Kies een uurschatting" class="text" required>
								<datalist id="uren">
								<option value="Geen">
								<option value="1-5">
								<option value="6-10">
								<option value="11-15">
								<option value="16-20">
								<option value="21-25">
								<option value="26-30">
								<option value="30+">
								</datalist></td></tr>
					<tr><td style="vertical-align: top;">Wat doe je in jouw vrije tijd?</td>
							<ul>
							<td><li style="list-style-type: none;"><input type="radio" name= "besteding" value="vrienden" required> Chillen met vrienden</li>
								<li style="list-style-type: none;"><input type="radio" name= "besteding" value="tv"> TV kijken</li>
								<li style="list-style-type: none;"><input type="radio" name= "besteding" value="sport"> Sporten</li>
								<li style="list-style-type: none;"><input type="radio" name= "besteding" value="gamen"> Gamen</li>
								<li style="list-style-type: none;"><input type="radio" name= "besteding" value="lieverniet"> Vertel ik liever niet</li>
								<li style="list-style-type: none;"><input type="radio" name= "besteding" value="Anders" > Anders</li></ul></td></tr>
					<tr><td>Hoeveel uur zit je op je telefoon op een dag?</td>
								<td><input type = "text" size= "25" name = "teltijd" placeholder="Vul een uurschatting in" class="text" required></td></tr>
					<tr><td><p><input type = "submit" name='verstuurd' value = "Verstuur" class="knop"></p> </td></tr>
				</fieldset>
		</form>
		</table>
	</body>
</html>

我希望将鼠标悬停在按钮上以更改背景,但它并没有做任何不同的事情。

【问题讨论】:

您不能在 CSS 中“向上”移动 DOM,因此子按钮不会影响父元素 HTML。你可以使用 JS 来实现。 ***.com/questions/1014861/… 【参考方案1】:

嗨,Darren,欢迎来到 Stack Overflow!

您在这里遇到的问题是 CSS 无法向上选择。即不能选择给定选择器的父级。因此,当您将鼠标悬停在按钮上时,无法将样式应用于正文。

.background-changer:hover > div 
 position: absolute;
 left: 0;
 top: 0;
 right: 0;
 bottom: 0;
 z-index: -1;
 background: #fcc;
 pointer-events: none;
<h1>
  Hello World!
</h1>

<button class="background-changer">
  Hover me!
  <div></div>
</button>

这是通过将子元素从其父元素中转义并将其分布在整个页面上来实现的。 pointer-events: none 消除了一些错误的副作用,但它可能不是最稳定的解决方案。

让我们别无选择,只能选择 javascript

【讨论】:

【参考方案2】:

使用纯 CSS 实现这一点有点 hacky。以下是使用 jQuery 实现此功能的方法:

$(".toggleBgBtn").hover(function()
  $("body").css("background-image", "url('https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA4OC85MTEvb3JpZ2luYWwvZ29sZGVuLXJldHJpZXZlci1wdXBweS5qcGVn')");
  , function()
  $("body").css("background-image", "url('https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80')");
);
body 
  background-image: url("https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80");
  background-size: cover;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
  <input class="toggleBgBtn" type="button" value="Hover to change background image">
</body>

这里发生的情况是,当在 toggleBgBtn 类的元素上检测到 hover 事件时,执行第一个函数(它选择页面主体并更改其背景图像)。然后,当鼠标退出元素时,执行第二个函数(它选择页面的主体并将其背景图像更改回原始图像)。

使用您的代码:

html
    font-family: 'Nunito', sans-serif;

body
    background-size: cover;
    color: white;
    letter-spacing: 0.5x;
    background-image: url("https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80");

input
   margin-left: 10%;

.text
    padding: 5px 15px;
    min-width: 200px;
    letter-spacing: 0.3px;

.knop
    padding: 8px 28px;
    border: #dcbc71 2px solid;
    background-color: transparent;
    color: #fff;
    -webkit-transition: border-radius 0.6s;

.knop:hover
    transition: 0.6s;
    border-radius: 10px;
    color: rgba(0, 0, 0, 0.5);
    background-color: #fcdd96;
<!DOCTYPE html> 
<html lang="nl"> 
	<head>
		<title>Enquete</title>
		<meta charset="utf-8"> 
		<link rel="stylesheet" href="enq.css">
		<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
		
		<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
	</head>
	<body>
		<fieldset>
				<legend><h3>Vrijetijdsbesteding</h3></legend>
				<form name="form" method="post" action ="verstuur.php"> 
				<p> Welkom bij deze enquete over vrijetijdsbesteding. Vul het aub eerlijk in zodat wij de best mogelijke resultaten krijgen.
					<table>
					<tr><td><p><input type = "submit" name='verstuurd' value = "Verstuur" class="knop"></p> </td></tr>
				</table>
		</form>
    </fieldset>
    <script>
			$(".knop").hover(function()
  			$("body").css("background-image", "url('https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA4OC85MTEvb3JpZ2luYWwvZ29sZGVuLXJldHJpZXZlci1wdXBweS5qcGVn')");
  			, function()
  			$("body").css("background-image", "url('https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80')");
			);
		</script>
	</body>
</html>

【讨论】:

如何将它添加到我的代码中?我已经尝试过我自己的课程,然后是你的课程,但什么也没发生。我的猜测是我错误地实现了 jQuery。标题看起来像this @Darren 请在您的帖子中包含您的 HTML 代码,我将使用有效的 sn-p 为您的代码编辑我的答案。 我已经添加了我的 html 代码。我想要工作的按钮叫做 knop @Darren 您的代码实际上很好。您只需将我的 jQuery &lt;script&gt;&lt;/script&gt; 移动到 HTML 页面的底部,在 &lt;/body&gt; 标记之前。 @Darren 在我的回答中添加了一个有效的 sn-p。我刚刚删除了表格中不相关的部分。

以上是关于使用css将鼠标悬停在按钮上时如何更改站点背景图像?的主要内容,如果未能解决你的问题,请参考以下文章

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

悬停在列表项上时更改背景图像

CSS样式:悬停时如何更改图像?

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

将鼠标悬停在列表上时如何更改锚点颜色

将鼠标悬停在按钮上时如何更改 div 的文本?