是否有可能有一个比 1px 更细的边框,并且可以在 IE6+ 中工作,并且不是图像并且可以在视觉上正确渲染?
谢谢你。
我认为你可以使用像
em
这样的单位来定义边框的宽度,它会小于1px,并且它是有效的。然而,正如威尔·马丁所说,出于显示目的,它只会将其向上或向下舍入为整个像素。
编辑:我已经监督了 IE6 限制,但我将答案留在这里给其他人......
可以使用
transform:scale(0.5)
并在里面放置一个带有 border:1px;
的边框元素。所以你会得到一个半像素边框,它(尽管被欺骗并且依赖于浏览器)显示在屏幕上。但我用这个技巧来打印。
当然,你必须调整元素的内容,或者玩一下
position
.outer {
border:1px solid green;
}
.halfpix {
-ms-transform-origin: 0 0;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-ms-transform:scale(0.5);
-webkit-transform:scale(0.5);
transform:scale(0.5);
width:200px;
height:100px;
border:1px solid black;
}
<div class="outer">
<div class="halfpix">
</div>
zoom browser window if your browser does not display
</div>
我不知道 IE8-10(IE6-7 肯定不行),但在 Chrome 和 FF 中我得到了带有框阴影的最薄边框。最好使用 1px
HR 上的细边框在 FF 中比 Chrome 中更突出,但 Chrome 也会渲染 2px。
http://jsfiddle.net/GijsjanB/3G28N/
.thin {
border: 1px solid white;
box-shadow: 0 0 1px black;
}
不。您无法显示小于一像素的尺寸,因为像素是显示器的基本单位。无论如何,据我所知,没有浏览器允许您指定子像素宽度。它们只是向上舍入为 1 像素或向下舍入为 0 像素。
虽然目前在任何版本的 IE 或 Edge 中都不可能实现这一点,但在最新版本的 Firefox 和 Chrome 上,您现在可以使用小于 1px 的边框宽度值。
.borderTest {
box-sizing: border-box;
display: block;
margin: 0.5em;
padding: 0.5em;
width: calc( 100% - 1em );
}
.borderTest:nth-child(1){
border: 1px solid #000
}
.borderTest:nth-child(2){
border: 0.75px solid #000
}
.borderTest:nth-child(3){
border: 0.5px solid #000
}
.borderTest:nth-child(4){
border: 0.25px solid #000
}
<div class="borderTest">1px</div>
<div class="borderTest">0.75px</div>
<div class="borderTest">0.5px</div>
<div class="borderTest">0.25px</div>
这会在超高清屏幕上输出以下内容:
你可以像这样变换线条:
.thin{ -ms-transform:scale(1, 0.5); -webkit-transform:scale(1, 0.5); transform:scale(1, 0.5);}
或者,如果线是垂直的
.thin{ -ms-transform:scale(0.5, 1); -webkit-transform:scale(0.5, 1); transform:scale(0.5, 1);}
要在高 DPI/@2x/retina 显示器上渲染原生 1px 边框,有一些技巧。
在 Firefox 和 Safari(macOS 和 iOS)上,使用
0.5px
边框:
/* Fallback: Most browsers now render 0.5px as 1px though */
.el {
border: 1px solid red;
}
.retina .el {
border: 0.5px solid red;
}
在 Chrome 上,使用宽度为 0.5 像素的框阴影:
.retina-chrome .el {
box-shadow: 0 0 0 0.5px red;
}
使用JS向HTML元素添加类以仅针对@2x+显示。
if (window.devicePixelRatio >= 2) {
document.documentElement.classList.add(
window.chrome ? 'retina-chrome' : 'retina'
);
}
对于 @1x 显示器,请使用颜色稍浅的 1px 边框。
尝试添加盒子阴影
box-shadow: 0px 0px 1px 0px black;
编辑:Chrome 98(2022 年 2 月 1 日)添加了对小于 1px 的
border-width
值的直接支持。
截至 2020 年中期,当前版本的 Safari 和 Firefox 均支持
border-width: .5px
。
另一方面,Chrome 会将其视为
1px
。
您可以通过以下方式检测浏览器是否支持:
var el = document.createElement('div');
el.style.position = 'fixed';
el.style.borderTop = '.5px solid';
document.body.appendChild(el);
var hasSubpixelBorder = el.getBoundingRect().height < 1;
document.body.removeChild(el);
如果您在启动时执行此操作,请确保在创建
document.body
之后调用此函数。
如果不支持(例如 Chrome),您可以向
document.body
或某些父元素添加一个类,以使后代采用不同的边框样式:
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) {
.noSubpixelBorder .border-top {
border-top-width: 0;
background-image: linear-gradient(180deg, var(--mycolor) 0, var(--mycolor) .5px, transparent 0);
}
}
@media (-webkit-min-device-pixel-ratio: 3) and (-webkit-max-device-pixel-ratio: 3.5), (min-resolution: 3dppx) and (max-resolution: 3.5dppx) {
.noSubpixelBorder .border-top {
background-image: linear-gradient(180deg, var(--mycolor) 0, var(--mycolor) .333333px, transparent 0);
}
}
您可以使用多个线性渐变来实现多侧边框。这接管了
background-image
,所以如果你将它用于其他用途,你将需要找到另一种方法(还有其他几种方法)。
这不是特别干净,但似乎始终有效。
如果你想变得超级狡猾,你可以通过动态计算样式表来支持奇怪的像素比。
0.1em 显示的边框小于 1px 尝试使用 1px 的虚线边框,并将其与 0.1em 进行比较
也许发帖晚了,
<table>
<tr>
<td style="border:1px ridge">
....text....
</td>
</tr>
<table>
使用脊线(替代方案)作为细边框//IMO
对我来说这有效:
border-top: 1px solid #ffffff26;
尝试
border-top: 1px solid #c9d6df;
小于
border: 1px solid #c9d6df;
您可以使用 CSS border-image 将 SVG 或其他图像设置为边框,然后您可以将图像线条设置为您想要的宽度。它可能仍会在屏幕上呈现为 1px,但如果您随后打印或保存网页,则将保留真实大小。
有了边框,你很难实现更细的线条!
如果你想像我一样有一条水平线,你可以用
height
而不是 border
来实现:
注意:也许您需要放大才能看到两条线之间的真正区别!
.normal {
height: 1px;
background-color: #8bacda;
}
.thinner {
height: 0.01em;
background-color: #8bacda;
}
<p>Normal Line</p>
<div class="normal"></div>
<p>Thinner Line</p>
<div class="thinner"></div>
要轻松获得看起来小于像素的边框,只需将边框元素的不透明度设置为0.1即可。
border{
opacity: 0.1;
}
可以使用 box-shadow 作为边框来完成:
box-shadow: 0px 0px 0.5px 1px rgba(0,0,0,1);