具有自定义尺寸的线性渐变

Dan*_*ani 5 css

我有这样的设计:

在此输入图像描述

它已经使用 html/css 创建,但我需要删除 1 和 5 的额外线条。这是通过添加位置绝对元素来创建灰线来实现的,但容器点的大小是响应式的。

我的想法是为每个容器创建一个背景线性渐变,如下所示:

对全部

background: linear-gradient(to right, grey 100%, transparent 0);
Run Code Online (Sandbox Code Playgroud)

对于第一个:

background: linear-gradient(to left, grey 50%, transparent 0);
Run Code Online (Sandbox Code Playgroud)

对于最后一个:

background: linear-gradient(to right, grey 50%, transparent 0);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何让它变小:

在此输入图像描述

Ter*_*rry 3

假设所有项目具有相同的宽度,则渐变应从 1 的中点开始,到 5 的中点结束,这意味着它应该从 10% 标记开始,到 90% 标记结束,类似于linear-gradient(to right, transparent 10%, grey 10%, grey 90%, transparent 90%)

要限制背景的大小,可以使用background-size: 100% [DESIRED_HEIGHT]控制它。假设您希望栏的厚度为 16px,那么您可以使用background-size: 100% 16px. 将其与background-repeat: no-repeat避免渐变重复并将background-position: center center其居中相结合。

请参阅概念验证示例:

body {
  font-family: Arial, sans-serif;
}

ul {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: space-around;
  
  background-image: linear-gradient(to right, transparent 10%, grey 10%, grey 90%, transparent 90%);
  background-size: 100% 8px;
  background-repeat: no-repeat;
  background-position: center center;
}

ul.colors {
  background-image: linear-gradient(
    to right,
    transparent 10%,
    red 10%,
    red 30%,
    orange 30%,
    orange 50%,
    green 50%,
    green 70%,
    blue 70%,
    blue 90%,
    transparent 90%
  );
}

ul li {
  display: block;
  width: 48px;
  height: 48px;
  border: 1px solid #999;
  border-radius: 50%;
  background-color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)
<strong>Plain</strong>
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</ul>
<br /><br />
<strong>Colors</strong>
<ul class="colors">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</ul>
Run Code Online (Sandbox Code Playgroud)