Estou tentando adicionar um gradiente aos dias anteriores em um calendário, mas as linhas de gradiente que não se alinham parecem um pouco meh.
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
);
}
<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>
Sem fazer os dias ao quadrado ( aspect-ratio: 1/1
), é possível alinhar esses gradientes?
Eu estava pensando que talvez pudesse fazer o fundo de todo o componente com esse gradiente, mas então me deparo com o mesmo problema se quiser usar o mesmo gradiente com cores diferentes em outros dias.
eu faria assim:
Use o gradiente como plano de fundo
div.month
e deixe-o vermelho. Para o normal,div.day
você adiciona um fundo branco e, para o.past
fundo, torna-o transparente e adiciona um arquivobackdrop-filter
.Ao usar
grayscale(1)
o fundo não é mais vermelho e então eu forço um pouco o brilho.Presumi que você deseja usar vermelho para datas bloqueadas. Se você quiser usar mais cores do que vermelho e cinza (por exemplo, verde para feriados), você pode usar
hue-rotate
:Acho que isso pode levar você até lá, mas sem o código real, é difícil dizer.
background-gradient
.::after
aday
classetoday
(é aqui que você pode precisar modificar para seu aplicativo).day
elemento, portanto, usarposition: absolute
posicionará opseudo
elemento em relação aomonth
elemento, que defini comoposition: relative
ativado.clip-path: content-box;
para restringir apseudo
exibição apenas ao.today
elemento de classe.Usando
inset(0)