【问题标题】:Why is CSS child element larger than parent (sortables)?为什么 CSS 子元素大于父元素(可排序)?
【发布时间】:2012-07-05 18:21:34
【问题描述】:

我有一个带有多个 LI 的 UL。 在这些里有表格(每里1个)。

我使用 mootools 使我的 li 可拖动/可排序。 不过,我将把 JavaScript 放在外面,因为它不是问题的一部分。

一切都很好,除了我不希望我的整个 li (以及子表)是可拖动的。可以说只是一小部分。

然后我尝试“相对和绝对”摆脱这个问题,但是 li 的“悬停”效果仍然存在......所以当我悬停我的(子)表时,(父)li 总是显示它的: 悬停效果。这是不应该的!

<ul>
  <li>
    <table cellpadding="0" cellspacing="0">
      <tr>
        <td>...</td>
        <td><a href="foobar.html">foobar</a></td>
        <td>...</td>
        <td>...</td>
        <td>...</td>
      </tr>
    </table>
  </li>
</ul>

<style>
  ul {
    list-style: none;
    margin: 0;
    padding: 0;
    float: left;
  }
  
  li {
    background-color: red;
    width: 25px;
    height: 25px;
    float: left;
    clear: both;
  }
  
  li:hover {
    background-color: green;
    cursor: move;
  }
  
  li table {
    border: 1px solid #eee;
    width: 850px;
    position: absolute;
  }
</style>

如果你应用这个,你会看到实际的 li 是 25x25。但是当你将鼠标悬停在桌子上时,li 变成绿色(只是那个 25x25 部分)......

只有 25x25 的部分应该响应悬停!

【问题讨论】:

    标签: css hover css-position parent


    【解决方案1】:

    问题在于您的标记。 您在列表项 (li) (的兄弟)中有表格,因此您应用于 li 的任何效果/样式都将应用于其中的所有内容;因此,为什么当您将鼠标悬停在桌子上时,li 会变成绿色。

    【讨论】:

    • 是的,我知道。但是,我不清楚为什么我可以改变父尺寸,但不能改变它的悬停尺寸(可以这么说)......这似乎是一件奇怪的事情
    【解决方案2】:

    当您将鼠标悬停在tableli 的子代)上时,您也会触发:hover 伪类li

    一种解决方案可能是将一个类应用于所有 li,其中包含一个表

    <li class="withTable">
        <table cellpadding="0" cellspacing="0">
            <tr>
                <td>...</td>
                <td><a href="foobar.html">foobar</a></td>
                <td>...</td>
                <td>...</td>
                <td>...</td>
            </tr>
        </table>
    </li>
    

    将此规则添加到您的 CSS 中

    li.withTable:hover {
            background-color:transparent;
            cursor:default;
    }
    

    显然你可以根据需要设置另一种颜色

    li.withTable:hover {
            background-color:blue;
            cursor:default;
    }
    

    【讨论】:

    • 我刚刚尝试了您的建议,但 25x25 父级在悬停子表时仍变为绿色。当我按类而不是按类型调用 li 时,为什么事情会有所不同?我开始担心我想要的东西是不可能的;)。
    • 尝试设置li.withTable:hover {background-color:red;} 就像在这个fiddle 中一样
    • 由于specificity,事情的表现有所不同
    • 嗨,Elisa,是的,我也这么想。你的小提琴永远不会变绿。即使 li 本身悬停也不行。恐怕我必须更改可排序的 javascript 才能解决我的问题。
    猜你喜欢
    • 2012-12-26
    • 2010-11-07
    • 2017-05-05
    • 2011-10-29
    • 2013-10-25
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多