微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在没有 JavaScript 的情况下向 DIV 添加悬停效果纯 CSS

如何解决在没有 JavaScript 的情况下向 DIV 添加悬停效果纯 CSS

假设我们有一个简单的网站水平导航:

|首页 |关于 |产品 |联系 |留下深刻印象 | ...或类似...

导航上方有一个矩形。

现在我想根据当前悬停的导航条目自动水平(左/右)“滑动”这个矩形。

示例:

  • 如果将鼠标悬停在条目 2(“关于”)上,则矩形应向右滑动 5em
  • 如果将条目 5(“印象”)悬停,则矩形应向右滑动 20em,依此类推。

HTML:

<div id="rectangle"></div>

<ul class="navigation">
    <li><a href="#">Entry 1</a></li>
    <li><a href="#">Entry 2</a></li>
    <li><a href="#">Entry 3</a></li>
    <li><a href="#">Entry 4</a></li>
    <li><a href="#">Entry 5</a></li>
</ul>

CSS:

我还不确定如何在 CSS 中解决这个问题。我的方法是这样的:

#rectangle {
    background-color: powderblue;
    width: 10em;
    height: 2em;
    margin: 0 auto;
    position: absolute;
}

ul li:nth-child(1):hover ~ #rectangle {right:0em}
ul li:nth-child(2):hover ~ #rectangle {right:5em}
ul li:nth-child(3):hover ~ #rectangle {right:10em}
ul li:nth-child(4):hover ~ #rectangle {right:15em}
ul li:nth-child(5):hover ~ #rectangle {right:20em}

不幸的是,这不能按预期工作。我做错了什么吗?

#rectangle {
  background-color: powderblue;
  width: 10em;
  height: 2em;
  margin: 0 auto;
  position: absolute;
}

ul li:nth-child(1):hover~#rectangle {
  right: 0em
}

ul li:nth-child(2):hover~#rectangle {
  right: 5em
}

ul li:nth-child(3):hover~#rectangle {
  right: 10em
}

ul li:nth-child(4):hover~#rectangle {
  right: 15em
}

ul li:nth-child(5):hover~#rectangle {
  right: 20em
}
<div id="rectangle"></div>

<ul class="navigation">
  <li><a href="#">Entry 1</a></li>
  <li><a href="#">Entry 2</a></li>
  <li><a href="#">Entry 3</a></li>
  <li><a href="#">Entry 4</a></li>
  <li><a href="#">Entry 5</a></li>
</ul>

解决方法

你可以做 display:none;在常规 div 上并使用伪类 :hover 来显示内容。

<form [formGroup]="checkboxGroup">
   <ion-card-subtitle>
      <ion-label class="title">Title</ion-label>
   </ion-card-subtitle>
   <ion-card-content class="checkbox">
      <ng-container *ngFor="let checkbox of  valence; let i = index" [result of checkboxes][1] formArrayName="valence">
      <!--iterate over  array-->
      <input type="checkbox" [formControlName]="i" (change)="onChange(checkbox)" /> 
      {{checkbox.name}}
     <br />
     </ng-container>
   </ion-card-content>
</form>
,

矩形是一个伪元素,你可以这样解决它(没有额外的元素):

ul {
  position: relative;
  margin: 0;
  padding: 0;
}

ul li {
  display: inline-block;
}

ul li:last-child:after {
  content: '';
  background-color: powderblue;
  width: 10em;
  height: 2em;
  margin: 0 auto;
  position: absolute;
  z-index: -1;
  left: 0;
  transition: .4s ease-in-out;
}

ul li:nth-child(1):hover~li:last-child:after {
  transform: translateX(0em);
}

ul li:nth-child(2):hover~li:last-child:after {
  transform: translateX(5em);
}

ul li:nth-child(3):hover~li:last-child:after {
  transform: translateX(10em);
}

ul li:nth-child(4):hover~li:last-child:after {
  transform: translateX(15em);
}

ul li:nth-child(5):hover:after {
  transform: translateX(20em);
}
<ul class="navigation">
  <li><a href="#">Entry 1</a></li>
  <li><a href="#">Entry 2</a></li>
  <li><a href="#">Entry 3</a></li>
  <li><a href="#">Entry 4</a></li>
  <li><a href="#">Entry 5</a></li>
</ul>

,

使用纯 CSS 实现这一点的简单方法是:

只需编写 class="navigation" 和 li hover

navigation li:hover{
opacity: 0.9;
padding-left: 3px;
padding-right: 7px;
background-color:#f2f2f2;
transition: 0.9s;

}

如果需要,您可以更改其他更改...

,

您不能使用 CSS(除非您遵循这些 conditions),但您可以通过在 jQuery 和 {onMouseOver 中更改样式来获得相同的效果{1}} 个参数,

onMouseOut
$(function() {
  $('#a').hover(function() {
    $('#rectangle').css('right','0em');
  },function() {
   
    $('#rectangle').css('right','');
  });
   $('#b').hover(function() {
    $('#rectangle').css('right','5em');
  },'');
  });
   $('#c').hover(function() {
    $('#rectangle').css('right','10em');
  },function() {
    
    $('#rectangle').css('right','');
  });
  $('#d').hover(function() {
    $('#rectangle').css('right','15em');
  },'');
  });
  $('#e').hover(function() {
    $('#rectangle').css('right','20em');
  },'');
  });
});
#rectangle {
    background-color: powderblue;
    width: 10em;
    height: 2em;
    margin: 0 auto;
    position: absolute;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。