css 由于border-collapse属性,HTML表格有一条奇怪的粗体水平线

afdcj2ne  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(187)

***编辑1:***问题似乎与CSS的border-collapse属性有关,因此可以通过使用border-spacing来解决:0 px。但是为什么是边框折叠导致的呢?它与缩放有关,因为如果你放大或缩小窗口,它会导致奇怪的粗线,但在我的情况下,我有浏览器设置为默认缩放,以及系统(windows 11)也在推荐的125%(我一直使用)缩放。我不明白什么是错的

最近,我在创建一个HTML表格时,在一些行后看到了一条奇怪的横线。我附上了截图。代码是一个简单的HTML表格和简单的CSS来添加边框,没有什么花哨的。我将在这里附上代码。

表格.html

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Phone</th>
        <th>Email</th>
    </tr>
    <?php while($user= mysqli_fetch_array($query)){ ?>
    <tr>
        <td><?php echo $user['id']; ?></td>
        <td><?php echo $user['name']; ?></td>
        <td><?php echo $user['phone']; ?></td>
        <td><?php echo $user['email']; ?></td>
    </tr>
    <?php } ?>
</table>

样式.css

table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
laik7k3q

laik7k3q1#

这是由于浏览器的缩放处理不当造成的。
如果你有一个1 px的边框,并且DPI Scaling设置为150%,那么从技术上讲,边框应该是1.5px。因为浏览器不使用亚像素渲染,所以它在1 px和2 px之间交替。
有多种方法来处理它。

1.将border-width设置为0.01px

一个快速而粗略的解决方法,因为浏览器将回退到至少1px

2.使用resolution介质查询

根据缩放级别将边框宽度更改为适当的小数。

@media (min-resolution: 120dpi) {
  table, th, td {
    border-width: 0.75px;
  }
}

@media (min-resolution: 144dpi) {
  table, th, td {
    border-width: 0.666px;
  }
}

@media (min-resolution: 192dpi) {
  table, th, td {
    border-width: 0.5px;
  }
}

以下是不同DPI缩放级别及其值的概述

DPI缩放级别

  • 较小100%(默认)= 96 dpi
  • 中等125% = 120 dpi
  • 较大150% = 144 dpi
  • 超大200% = 192 dpi

3.脚本语言

使用window.devicePixelRatio变量,通过JavaScript将border-width更改为每个缩放级别的相应小数。

2ul0zpep

2ul0zpep2#

使用DvdRom的答案,我修复了这个问题与Javascript和CSS变量,以获得一个1px的边界间距。看起来像它的工作在Firefox,Chrome,边缘,Opera和勇敢。

let cssRoot = document.querySelector(':root');
cssRoot.style.setProperty
(
     '--table-border-spacing',
     `${1 / window.devicePixelRatio}px`
);
:root {
    --table-border-spacing: 1px;
}

table {
    border-collapse: separate;
    border-spacing: var(--table-border-spacing);
}

相关问题