是否可以在元素之间对齐渐变?

Jan*_*ert 3 css gradient

我试图在日历中为过去的日子添加渐变,但渐变线未对齐看起来有点无聊。

div.month {
  flex: 1 1 auto;
  display: grid;
  grid-gap: 1px;
  grid-template-columns: repeat(7, 1fr);
  background-color: var(--color-border);

}

div.day {
  background-color: var(--color-fill);
}

div.day + .past {
  background: repeating-linear-gradient(
    -45deg,
    var(--color-fill),
    var(--color-fill) 1.5rem,
    var(--color-gradient-calendar-past) 1.5rem,
    var(--color-gradient-calendar-past) 3rem
  );
}
Run Code Online (Sandbox Code Playgroud)
<div class="month noselect">
        <div class="day void"><div class="day-number"></div></div>
        <div class="day past"><div class="day-number">1</div></div>
        <div class="day past"><div class="day-number">2</div></div>
        <div class="day past"><div class="day-number">3</div></div>
        <div class="day past"><div class="day-number">4</div></div>
        ...
        <div class="day today"><div class="day-number">17</div></div>
Run Code Online (Sandbox Code Playgroud)

如果不将日子变成正方形(aspect-ratio: 1/1),是否可以对齐这些梯度?

在此输入图像描述

我在想也许我可以让整个组件的背景变成渐变,但是如果我想在其他日子使用不同颜色的相同渐变,我就会遇到同样的问题。

在此输入图像描述

RAN*_*NGO 5

我会这样做:

使用渐变作为背景div.month并将其设为红色。对于正常情况div.day,您添加白色背景,对于正常情况,.past您使背景透明并添加backdrop-filter.

div.month {
    height: 23vW;
    flex: 1 1 auto;
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    background: repeating-linear-gradient(-45deg, #fff, #fff 1.5rem, #fdc5d0 1.5rem, #fdc5d0 3rem );
}

div.day {
    border: 1px solid #fff;
    background-color: #fff;
}

div.day + .past {
    background-color: #0000;
    backdrop-filter: grayscale(1) brightness(1.13);
}

div.day + .blocked {
    background-color: #0000;
}
Run Code Online (Sandbox Code Playgroud)
<div class="month noselect">
    <div class="day void"><div class="day-number"></div></div>
    <div class="day past"><div class="day-number">1</div></div>
    <div class="day past"><div class="day-number">2</div></div>
    <div class="day past"><div class="day-number">3</div></div>
    <div class="day past"><div class="day-number">4</div></div>
    <div class="day past"><div class="day-number">5</div></div>
    <div class="day past"><div class="day-number">6</div></div>
    <div class="day past"><div class="day-number">7</div></div>
    <div class="day blocked"><div class="day-number">8</div></div>
    <div class="day past"><div class="day-number">10</div></div>
    <div class="day past"><div class="day-number">11</div></div>
    <div class="day past"><div class="day-number">12</div></div>
    <div class="day past"><div class="day-number">13</div></div>
    <div class="day past"><div class="day-number">14</div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

通过使用grayscale(1)背景不再是红色,然后我稍微提高亮度。

我假设您想使用红色来表示阻止的日期。如果您想使用红色和灰色之外的更多颜色(例如假期绿色),您可以使用hue-rotate

div.day + .holiday {
    backdrop-filter: hue-rotate(123deg);
}
Run Code Online (Sandbox Code Playgroud)