【问题标题】:Links to change colour with css not working properly使用 css 更改颜色的链接无法正常工作
【发布时间】:2018-12-20 19:46:38
【问题描述】:

我有一些代码正在尝试制作导航栏。我在代码中有链接,当页面向上滚动一点时我更改了它们。我可以更改颜色,但无法在悬停时更改以保持永久状态?我似乎已经尝试了一切,但它就像它一直在重置我的 CSS。它适用于链接,但似乎无法更改悬停颜色以保持不变。

$(document).ready(function() {
  $(window).scroll(function() {
    var scroll = $(window).scrollTop();
    if (scroll > 10) {
      $(".white").css("background", "#362c6e");
      $(".white").css("color", "#ffffff");
      $(".nav-login").css("color", "#ffffff");
      $(".nav-big a:link").css("color", "#ffffff");
      $(".nav-more a:link").css("color", "#ffffff");
    }
    if (scroll < 10) {
      $(".white").css("background-color", "rgba(255, 255, 255, 0)");
      $(".white").css("color", "#111111");
      $(".nav-login").css("color", "#362c6e");
      $(".nav-big a:link").css("color", "#362c6e");
      $(".nav-more a:link").css("color", "#362c6e");
    }

  })
})
.image-container-left {
  margin-left: 40px;
  margin-top: 0px;
}

#nav {
  overflow: hidden;
  width: 100%;
  /* Full width */
  border: 0;
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  float: left;
  list-style: none;
}

.nav-image-left {
  border: 0;
  list-style-type: none;
  margin: 0;
  padding: 0;
  margin-right: 5px;
  margin-top: 17px;
  margin-left: 5px;
  float: left;
  list-style: none;
}

.nav-big {
  border: 0;
  list-style-type: none;
  margin: 0;
  padding: 0;
  margin-right: 5px;
  margin-top: 37px;
  float: left;
  list-style: none;
  margin-left: 5%;
}

.nav-more {
  border: 0;
  list-style-type: none;
  margin: 0;
  padding: 0;
  margin-top: 37px;
  margin-left: 30px;
  ;
  float: left;
  list-style: none;
}

.nav-login {
  list-style-type: none;
  float: right;
  margin-top: 37px;
  margin-right: 40px;
  color: 362c6e;
}

.nav-big a:hover,
a:visited,
a:link,
a:active {
  text-decoration: none;
}

.nav-more a:hover,
a:visited,
a:link,
a:active {
  text-decoration: none;
}

.nav-big a:link {
  color: #362c6e;
}

.nav-more a:link {
  color: #362c6e;
}

.nav-more a:hover {
  color: #e73972;
) 
.nav-big a:hover {
    color: #e73972;
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="nav" class='container-fluid white hidden-xs hidden-sm'>
  <ul>
    <li class='nav-image-left'>
      <div class='image-container-left'>
        <a href=index><img src='images/ctbig.png' height='62' alt='image-left' /></a>
      </div>
    </li>
    <li id="nav-big" class='nav-big'><a href='updating'> About us </a></li>
    <li class='nav-more'><a href='updating'> Register new job </a></li>
    <li class='nav-more'><a href='updating'> Register business </a></li>
    <li class='nav-more'><a href='updating'> Contact us </a></li>
    <li class='nav-more'><img src='images/users.png' alt='image-right' width='22' /><a href='updating'> Login </a></li>
    <li class='nav-login'>0800 038 6210</li>
  </ul>
</div>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>

【问题讨论】:

  • 您希望导航栏链接在点击时改变颜色吗?并保持这种状态,直到您点击另一个??
  • 悬停时的变化取决于页面是否向下滚动了一点,因为背景颜色发生了变化。除了 a:hover!!
  • 不确定是否是拼写错误,但您的 :hover css 的右括号错误。在这里很容易看到这个问题。您在 js 中设置颜色,它变成了内联 css,它覆盖了您的 css 规则。你的 js 做的工作比它需要的要多得多。当你通过 10 并在 css 而不是 js 中设置颜色时,只需向整个导航栏添加一个类

标签: javascript jquery html css


【解决方案1】:

我认为问题在于您如何尝试设置 css 属性。 $(".nav-big a:link") 选择 DOM 树中的实际元素,在您的 .css 文件中指定相应的规则。然后,当您在这些元素上调用“.css("property", "value")" 时,您实际上更改了它们的element.style 属性,这相当于将该属性设置为内联(即`) .

由于内联样式的specificity 高于.css 文件中定义的样式,因此您在.css 文件中的:hover 规则将不再适用。

实际上没有办法从 JavaScript 或 JQuery(它仍然只是一个 JavaScript 库)编辑您的 .css 文件,因此您应该做的是动态添加和删除类,如 here 所述。

顺便说一句,在 2018 年你真的不需要 jQuery 来完成这些任务。它有它的用途,但这些要么是高级的,要么是过时的。加载外部库会使您的页面膨胀,并且总体上不受欢迎。只需将 &lt;script&gt; 标签放在 &lt;body&gt; 的末尾即可替换 .ready,其他方法现在有直接的 js 对应物。如果您仍在学习该语言,请考虑切换到原生 js尤其是

【讨论】:

  • 谢谢,但我不太明白你的意思?那我应该如何尝试,什么是.ready?谢谢
  • .ready 我的意思是$(document).ready()。这个包装整个代码的函数 sn-p 用于确保您通过 $('whatever') 引用的任何元素已经存在于 DOM 中。同样可以通过将 来实现
  • 很抱歉,如果我说的任何话听起来让人不知所措,但 DOM(文档对象模型)在 JavaScript 中确实是一个重要的知识。如果您不想深入研究,这基本上就是您在浏览器中看到的内容如何可用于 JavaScript。例如,jQuery 用于操作 DOM,这反过来会改变您在页面上看到的内容。 jQuery 方法是在 JavaScript 中实现的,因此您可以在没有它的情况下完成 jQuery 所做的所有事情。你可以阅读它here
  • 尝试学习和使用inspector,这样你就会看到什么覆盖了你的悬停css
【解决方案2】:

这是你需要的吗?

$(document).ready(function(){
  $(window).scroll(function(){
    var scroll = $(window).scrollTop();
      
            $('#nav').toggleClass('before10',!(scroll > 10)); // toggle Class ad or remove a class considering the second parameter being true or false
            $('#nav').toggleClass('after10',(scroll > 10));// toggle Class ad or remove a class considering the second parameter being true or false

  })
})
body{
	min-height:700px;
}
.image-container-left {

  margin-left:40px;
  margin-top:0px;
}

#nav {
	overflow: hidden;
	width: 100%; /* Full width */
	border:0;
	list-style-type: none;
	margin: 0;
	padding: 0;
	overflow: hidden;
	float: left;
	list-style: none;
} 


.nav-image-left {
	border:0;
	list-style-type: none;
	margin: 0;
	padding: 0;
	margin-right: 5px;
	margin-top: 17px;
	margin-left: 5px;
	float: left;
	list-style: none;
} 

.nav-big {
	border:0;
	list-style-type: none;
	margin: 0;
	padding: 0;
	margin-right: 5px;
	margin-top: 37px;
	float: left;
	list-style: none;
	margin-left:5%;
}

.nav-more {
	border:0;
	list-style-type: none;
	margin: 0;
	padding: 0;
	margin-top: 37px;
	margin-left: 30px;;
	float: left;
	list-style: none;   
}


.nav-login {
   list-style-type: none;
   float: right;
   margin-top: 37px;
   margin-right:40px;
   color:362c6e;
}

#nav ul li a{
	color:blue;
	text-decoration:none;
}

#nav.before10 ul li a{
	color:blue;
	text-decoration:none;
}
#nav.before10 ul li a:hover{
	color:grey;
}
#nav.after10{
	background:teal;
}
#nav.after10 ul li a{
	color:red;
	text-decoration:none;
}
#nav.after10 ul li a:hover{
	color:white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="nav" class='before10 container-fluid white hidden-xs hidden-sm'>
<ul>
  <li class='nav-image-left'><div class='image-container-left'><a href=index><img src='images/ctbig.png' height='62' alt='image-left' /></a></div></li>
  <li id="nav-big" class='nav-big'><a href='updating'> About us </a></li>
  <li class='nav-more'><a href='updating'> Register new job </a></li>
  <li class='nav-more'><a href='updating'> Register business </a></li>
  <li class='nav-more'><a href='updating'> Contact us </a></li>
  <li class='nav-more'><img src='images/users.png' alt='image-right' width='22' /><a href='updating'> Login </a></li>

  <li class='nav-login'>0800 038 6210</li>
  </ul>
</div>

【讨论】:

  • 嗨,谢谢,是的,滚动时更改背景颜色效果很好,但不能更改文本和链接颜色?谢谢
  • 在此代码中,“a”标签上的文本颜色为蓝色,如果您的窗口与顶部的滚动距离小于 10 像素,则悬停时变为灰色。如果滚动超过 10 像素,“#nav”背景变为蓝绿色,“a”标签现在为红色并在悬停时变为白色,¿从顶部滚动 10 像素后,您还需要更改什么?
猜你喜欢
  • 2014-04-12
  • 2014-12-26
  • 2012-11-24
  • 2012-03-18
  • 2021-02-16
  • 1970-01-01
  • 2012-04-19
  • 2013-06-10
  • 1970-01-01
相关资源
最近更新 更多