在 CSS 中隐藏调整大小手柄图标

Posted

技术标签:

【中文标题】在 CSS 中隐藏调整大小手柄图标【英文标题】:Hiding resize handle icon in CSS 【发布时间】:2018-04-16 09:47:32 【问题描述】:

例如我有某种表格:

<table>
    <tr>
        <th><div>Title1</div></th>
        <th><div>Title2</div></th>
    </tr>

    <tr>
        <td><div>Body1</div></td>
        <td><div>Body2</div></td>
    <tr>
</table>

我希望每个 th 列都可以调整大小,所以我添加了一些 CSS:

th > div 
    resize: horizontal;
    overflow: hidden;

一切正常,每一列都可以水平调整大小。 问题是在每个&lt;th&gt; 中我都有一个用于调整大小的图标。我希望它被隐藏起来。有没有办法做到这一点?

【问题讨论】:

尝试th &gt; div, td &gt; div - 您当前的选择器全部为thdiv 内的全部div。或者,如果您不希望 th div 可调整大小,只需从选择器中删除 th 这是调整大小图标,还是其他按钮? 是浏览器添加的resize图标。您也可以在 textarea 中看到这样的图标。 但是如果你让一个元素可调整大小,它需要那个图标来显示它的可调整大小和拖动位置,否则用户怎么知道它是可调整大小的? 我想在右边框悬停时添加特殊光标图标,而不是调整图标大小 【参考方案1】:

以下是三种可能的解决方案:

    使用 ::webkit-resizer 伪选择器设置调整大小的样式 使用 :after 伪元素“隐藏”调整大小(并添加自定义光标) 使用:hover 伪类仅在:hover 上添加resize

1. 它不兼容跨浏览器,但可能对您有用 - ::-webkit-resizer 选择器。这允许对调整大小图标的样式进行一些基本控制。我们可以通过以下方式使其透明:

(这只适用于 Safari)

th > div,
td > div 
    resize: horizontal;
    overflow: hidden;
    text-align: left;


td > div::-webkit-resizer 
    background-color: transparent;
<strong>The `::-webkit-resizer` selector only works in Safari</strong>

<br/><br/>

<table>
    <tr>
        <th><div>Title1</div></th>
        <th><div>Title2</div></th>
    </tr>

    <tr>
        <td><div>Body1</div></td>
        <td><div>Body2</div></td>
    <tr>
</table>

2. 作为一种更跨浏览器的解决方案,我们可以将调整大小图标“隐藏”在:after 伪元素后面。这里的想法是创建一个:after 元素,它位于td &gt; div 元素的右下角(在调整大小图标的顶部),其背景颜色与表格单元格的背景颜色相匹配。唯一剩下的更改是在单元格的右侧添加少量填充,这样:after psuedo 元素就不会覆盖单元格内容。

此选项的主要优点是我们可以添加您提到的您想要的自定义光标。使用td &gt; div:hover:after 选择器,我们可以在可调整大小的表格单元格的右侧位于:hover 上时应用光标。像这样:

像这样:

th > div,
td > div 
  resize: horizontal;
  overflow: hidden;
  text-align: left;
  position: relative;
  padding: 0 8px 0 0;
  min-width: 45px;


td > div:after 
  content: "";
  display: block;
  position: absolute;
  bottom: 0px;
  right: 0px;
  background-color: white;
  width: 8px;
  height: 100%;


td > div:hover:after 
  cursor: col-resize;
<table>
  <tr>
    <th>
      <div>Title1</div>
    </th>
    <th>
      <div>Title2</div>
    </th>
  </tr>

  <tr>
    <td>
      <div>Body1</div>
    </td>
    <td>
      <div>Body2</div>
    </td>
    <tr>
</table>

3. 如果我们希望单元格可以调整大小,隐藏调整大小的元素,并让元素可以调整大小变得明显,我们可以使用:hover psuedo 类。

通过一些实验,我发现如果同时使用:hover:active 伪类,此解决方案效果最好,否则如果拖动光标过快,调整大小的句柄会丢失。

th > div 
    resize: horizontal;
    overflow: hidden;
    text-align: left;


td > div 
    padding-right: 10px;
    min-width: 40px;


td > div:hover,
td > div:active 
    resize: horizontal;
    overflow: hidden;
<strong>The `::-webkit-resizer` selector only works in Safari</strong>

<br/><br/>

<table>
    <tr>
        <th><div>Title1</div></th>
        <th><div>Title2</div></th>
    </tr>

    <tr>
        <td><div>Body1</div></td>
        <td><div>Body2</div></td>
    <tr>
</table>

【讨论】:

是的,现在你添加了光标,它很好,我正在尝试使用你覆盖的空间 它在没有自定义光标的情况下工作,只是不明显它是可能的。 第三种解决方案非常好!【参考方案2】:

如果您想从每个td 中删除图标,只需使用th &gt; div 选择器。

请看下面的例子:

如果你想玩那个调整大小的图标:Here

th > div
    resize: horizontal;
    overflow: hidden;
<table>
    <tr>
        <th><div>Title1</div></th>
        <th><div>Title2</div></th>
    </tr>

    <tr>
        <td><div>Body1</div></td>
        <td><div>Body2</div></td>
    <tr>
</table>

【讨论】:

以上是关于在 CSS 中隐藏调整大小手柄图标的主要内容,如果未能解决你的问题,请参考以下文章

检测单击可调整大小元素的调整大小手柄

在 Safari 中隐藏 textarea 调整大小句柄

在 Safari 中隐藏 textarea 调整大小句柄

单击汉堡图标并调整窗口大小后,Navbar消失(我不希望它隐藏)

如何更改调整大小手柄的外观?

调整“宽度”属性动画时不可见的手柄大小