为什么将div中的元素悬停会影响div兄弟姐妹?

时间:2015-10-15 08:15:12

标签: css

我提供两张图片来展示正在发生的事情。 在悬停之前:

enter image description here

悬停后:

enter image description here

xhtml代码:

    <body>
      <div>
         <div class="channel"><img src="./logos/svt1.png" alt="Channel logotype" /><div class="chName">SVT1</div>
            <ul>
               <li>
                  <div class="prog">01.20  Plus</div>
                  <div class="info">Program info here</div>
               </li>
               <!--more <li>-->
            </ul>
         </div>
         <div class="channel"><img src="./logos/svt2.png" alt="Channel logotype" /><div class="chName">SVT2</div>
            <ul>
               <li>
                  <div class="prog">01.00  Rapport</div>
                  <div class="info">Program info here</div>
               </li>
               <!--more <li>-->
            </ul>
         </div>
         <!-- and more <div> -->
      </div>
   </body>

这是我的CSS:

body{
position: absolute;
}

img{
    position: relative;
    top: 0;
    height: 60px;
    width: auto;
    margin-left: 30px;
}

ul{
    list-style-type: none;
    font-size: 12px;
}

li{
    padding-bottom: 1em;
}

li:hover .info{
    display: block;
}

li:hover{
    border: solid 1px darkgrey;
}

div{
    display: table;
}

.channel{

    display: inline-block;
    width: 32%;
    height: auto;
    padding: 5px;
    top: 0;
}

.chName{
    position: relative;
    float: right;
    top: 0;
    margin-top: 30px;
    margin-right: 40%;
    font-weight: bold;
}

.info{
    display: none;
    font-weight: bold;
}

所以我想知道为什么<li>的悬停会影响带有class = channel的<div> s,以及如何解决这个问题。

如果需要更多详细信息,请发表评论。 感谢

编辑: http://jsfiddle.net/robbannn/53j38uyh/

1 个答案:

答案 0 :(得分:4)

这是因为.channel设置为display: inline-block;,这意味着垂直对齐得到尊重。内联元素的默认垂直对齐方式为baseline。当您将鼠标悬停在li上时,您正在将.info更改为display: block;,这意味着基线不同。

要解决此问题,请将vertical-align: top;添加到.channel,以确保.channel始终与父级的顶部对齐。

&#13;
&#13;
body {
  position: absolute;
}
img {
  position: relative;
  top: 0;
  height: 60px;
  width: auto;
  margin-left: 30px;
}
ul {
  list-style-type: none;
  font-size: 12px;
}
li {
  padding-bottom: 1em;
}
li:hover .info {
  display: block;
}
li:hover {
  border: solid 1px darkgrey;
}
div {
  display: table;
}
.channel {
  display: inline-block;
  width: 32%;
  height: auto;
  padding: 5px;
  top: 0;
  vertical-align: top;
}
.chName {
  position: relative;
  float: right;
  top: 0;
  margin-top: 30px;
  margin-right: 40%;
  font-weight: bold;
}
.info {
  display: none;
  font-weight: bold;
}
&#13;
<div>
  <div class="channel">
    <img src="./logos/svt1.png" alt="Channel logotype" />
    <div class="chName">SVT1</div>
    <ul>
      <li>
        <div class="prog">01.20 Plus</div>
        <div class="info">Program info here</div>
      </li>
      <!--more <li>-->
    </ul>
  </div>
  <div class="channel">
    <img src="./logos/svt2.png" alt="Channel logotype" />
    <div class="chName">SVT2</div>
    <ul>
      <li>
        <div class="prog">01.00 Rapport</div>
        <div class="info">Program info here</div>
      </li>
      <!--more <li>-->
    </ul>
  </div>
  <!-- and more <div> -->
</div>
&#13;
&#13;
&#13;