【问题标题】:Inner border-radius on a table cell表格单元格的内边框半径
【发布时间】:2020-04-01 05:41:21
【问题描述】:

我正在尝试使用 HTML 表格和一些 CSS 创建相框。 我想为它添加一个内部边框半径,但我找不到为“边缘”(“正常边框”和“带半径的边框”之间的空格)着色的方法。

这是fiddle that showcases my problem。目标是对中心单元格的边缘进行着色,而不对其进行着色(它必须是透明的以显示下面的内容,即示例中的表格背景颜色)。

table {
  border-spacing: 0;
  background-color: aqua;
}
td {
    border: solid 1px red;
    padding: 50px;
    background-color: red;
}
td.middle {
  border-radius: 50px;
  border: 1px solid green;
  background-color: transparent;
}
tr:first-child td { border-top-style: solid; }
tr td:first-child { border-left-style: solid; }
<table>
  <tr>
    <td>1.1</td>
    <td>1.2</td>
    <td>1.3</td>
  </tr>
  <tr>
    <td>2.1</td>
    <td class="middle">2.2</td>
    <td>2.3</td>
  </tr>
  <tr>
    <td>3.1</td>
    <td>3.2</td>
    <td>3.3</td>
  </tr>
</table>

【问题讨论】:

    标签: css html-table


    【解决方案1】:

    您需要在 td 中考虑一个新元素
    如果有图像,您的 div 中将不需要 span

    table {
      border-spacing: 0;
      background-color: aqua;
    }
    td {
        border: solid 1px red;
        padding: 50px;
        background-color: red;
    }
    
    td.middle {
      padding: 0px;
    }
    #center_frame{
      width: 100px;
      height: 100px;
      margin: auto;
      border-radius: 50px;
      border: 1px solid green;
          border: solid 1px red;
        background-color: lightblue;
        text-align: center;
    }
    
    #center_frame span {
      line-height: 100px;
    }
    tr:first-child td { border-top-style: solid; }
    tr td:first-child { border-left-style: solid; }
    <table>
      <tr>
        <td>1.1</td>
        <td>1.2</td>
        <td>1.3</td>
      </tr>
      <tr>
        <td>2.1</td>
        <td class="middle">
          <div id="center_frame"><span>2.2</span></div>
        </td>
        <td>2.3</td>
      </tr>
      <tr>
        <td>3.1</td>
        <td>3.2</td>
        <td>3.3</td>
      </tr>
    </table>

    【讨论】:

    • 不幸的是,这并没有回答我的问题,因为单元格背景颜色必须是透明的才能让表格颜色出现,而不是简单地复制/粘贴它。
    • @RémyRaes sn-p 已更新,检查是否是您要查找的内容
    • 您的第一个版本在预期结果方面是视觉上正确的,唯一的问题是内部 div 需要透明才能显示表格颜色。
    • 如果你希望你的 td 是红色的,并且它是 transparent background 的子元素,那么当你设置一个项目的背景为透明,它显示父背景
    • 如果您有任何其他想法,我很想听听他们:)
    【解决方案2】:

    为此使用radial-gradient

    table {
      border-spacing: 0;
      background-color: aqua;
    }
    
    td {
      border: solid 1px red;
      padding: 50px;
      background-color: red;
    }
    
    td.middle {
      background:radial-gradient(farthest-side,transparent 99%,red 100%);
    }
    
    tr:first-child td {
      border-top-style: solid;
    }
    
    tr td:first-child {
      border-left-style: solid;
    }
    <table>
      <tr>
        <td>1.1</td>
        <td>1.2</td>
        <td>1.3</td>
      </tr>
      <tr>
        <td>2.1</td>
        <td class="middle">2.2</td>
        <td>2.3</td>
      </tr>
      <tr>
        <td>3.1</td>
        <td>3.2</td>
        <td>3.3</td>
      </tr>
    </table>

    对于自定义半径,您需要 4 个渐变:

    table {
      border-spacing: 0;
      background-color: aqua;
    }
    
    td {
      border: solid 1px red;
      padding: 50px;
      background-color: red;
    }
    
    td.middle {
      background:
        radial-gradient(farthest-side at bottom left, transparent 98%,red 100%) top    right,
        radial-gradient(farthest-side at bottom right,transparent 98%,red 100%) top    left,
        radial-gradient(farthest-side at top    left, transparent 98%,red 100%) bottom right,
        radial-gradient(farthest-side at top    right,transparent 98%,red 100%) bottom left;
      background-size:25% 25%; /* adjust this to control the radius (from 0% to 50% or pixel value)  */
      background-repeat:no-repeat;
    }
    
    tr:first-child td {
      border-top-style: solid;
    }
    
    tr td:first-child {
      border-left-style: solid;
    }
    <table>
      <tr>
        <td>1.1</td>
        <td>1.2</td>
        <td>1.3</td>
      </tr>
      <tr>
        <td>2.1</td>
        <td class="middle">2.2</td>
        <td>2.3</td>
      </tr>
      <tr>
        <td>3.1</td>
        <td>3.2</td>
        <td>3.3</td>
      </tr>
    </table>

    【讨论】:

    • 看起来很有趣!这怎么能用边界半径来实现?内部 div 不会在 100% 的情况下完美圆润(例如,请参阅 jsfiddle.net/p2wktm6n
    • 这确实适用于具有相同宽度和高度的 HTML 元素;在“矩形”元素上,与边界半径渲染相比,半径渐变看起来会被拉伸
    • @RémyRaes 使用像素值而不是百分比值。使用 % vs px 时,它与边框半径相同
    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 2012-08-03
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2012-03-24
    • 2021-11-21
    • 2012-04-23
    相关资源
    最近更新 更多