css 如何去除线性渐变线的模糊?

lx0bsm1f  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(188)

给定一个div,我想用视觉样式“锁定”/禁用。此前也有类似的模式

#box {
  width: 200px;
  height: 100px;
  border: 1px solid;
  background: repeating-linear-gradient(45deg, #1c71b8, #1c71b8 10px, #5fb5fc 10px, #5fb5fc 20px);
}
<div id="box">some content goes here, width and height are dynamic<br><br>it might take some space</div>

现在我想在div中划线(类似于draw diagonal lines in div background with CSS)。我只能设置元素的样式,因此无法添加额外的辅助div。我试过这个

#box {
  width: 200px;
  height: 100px;
  border: 1px solid;
  background: 
         linear-gradient(to top left,
             rgba(28, 113, 184, 0) 0%,
             rgba(28, 113, 184, 0) calc(50% - 5px),
             rgba(28, 113, 184, 1) 50%,
             rgba(28, 113, 184, 0) calc(50% + 5px),
             rgba(28, 113, 184, 0) 100%),
         linear-gradient(to top right,
             rgba(28, 113, 184, 0) 0%,
             rgba(28, 113, 184, 0) calc(50% - 5px),
             rgba(28, 113, 184, 1) 50%,
             rgba(28, 113, 184, 0) calc(50% + 5px),
             rgba(28, 113, 184, 0) 100%);
}
<div id="box">some content goes here, width and height are dynamic<br><br>it might take some space</div>

这是我想要的,但是我怎么才能从线条中去除模糊呢?有时我可能需要调整线条粗细,例如:将其更改为10 px。

uurv41yg

uurv41yg1#

你不需要所有这些颜色停止,你可以简化如下:

#box {
  width: 200px;
  height: 100px;
  border: 1px solid;
  background: 
         linear-gradient(to top left,
             rgba(28, 113, 184, 0)   calc(50% - 5px),
             rgba(28, 113, 184, 1) 0 calc(50% + 5px),
             rgba(28, 113, 184, 0) 0),
         linear-gradient(to top right,
             rgba(28, 113, 184, 0)   calc(50% - 5px),
             rgba(28, 113, 184, 1) 0 calc(50% + 5px),
             rgba(28, 113, 184, 0) 0);
}
<div id="box">some content goes here, width and height are dynamic<br><br>it might take some space</div>

使用CSS变量更好:

#box {
  --c: rgb(28 113 184); /* the color */
  --s: 5px; /* the size */
  
  width: 200px;
  height: 100px;
  border: 1px solid;
  --g: #0000 calc(50% - var(--s)),var(--c) 0 calc(50% + var(--s)),#0000 0;
  background: 
   linear-gradient(to top left ,var(--g)),
   linear-gradient(to top right,var(--g));
}
<div id="box">some content goes here, width and height are dynamic<br><br>it might take some space</div>
jaxagkaj

jaxagkaj2#

在渐变的1个色标的过程中,将线条从alpha值0渐变到alpha值1。在这两个值之间,alpha将(确实)变化。因为它们分别是50%-5 px、50%和50%+5 px,所以你有很多像素的alpha值可以改变。你把这种效果叫做模糊。
从线的一个边缘到线的另一个边缘,您希望颜色为单个值。
因此,不是有一个alpha为1的单个stop,而是有两个stop。它们中的每一个将代表线的一个边缘。然后,不是在多个像素上过渡回来,而是立即过渡回来,在相同位置处具有另一个颜色停止。
下面是它在代码中的样子:

#box {
  width: 200px;
  height: 100px;
  border: 1px solid;
  background: 
         linear-gradient(to top left,
             rgba(28, 113, 184, 0) 0%,
             rgba(28, 113, 184, 0) calc(50% - 5px),
             rgba(28, 113, 184, 1) 50%,
             rgba(28, 113, 184, 0) calc(50% + 5px),
             rgba(28, 113, 184, 0) 100%),
         linear-gradient(to top right,
             rgba(28, 113, 184, 0) 0%,
             rgba(28, 113, 184, 0) calc(50% - 2.5px),
             rgba(28, 113, 184, 1) calc(50% - 2.5px),
             rgba(28, 113, 184, 1) calc(50% + 2.5px),
             rgba(28, 113, 184, 0) calc(50% + 2.5px),
             rgba(28, 113, 184, 0) 100%);
}
<div id="box">some content goes here, width and height are dynamic<br><br>it might take some space</div>

相关问题