<p>我想要一个带有渐变的聊天气泡的白色容器,当滚动时,渐变会随着下面的渐变而变化,如本例所示:</p>
<p>我尝试将任何 <code>chatBubble</code> 后面的 <code>.container</code> 部分设为透明,以便 <code>.root</code> 的背景可见。 </p>
<p>
<pre class="brush:css;toolbar:false;">.root {
background-color: linear-gradient(red, yellow);
width: 100vw;
height: 100vh;
}
.container {
width: 100%;
height: 100vh;
background-color: white
}
.chatBubble {
background-color: transparent;
border-radius: 4px;
min-width: 50;
padding: 10px;
}</pre>
<pre class="brush:html;toolbar:false;"><div class="root">
<div class="container">
<chatBubble>This is a chat bubble</chatBubble>
<chatBubble>This is another chat bubble</chatBubble>
</div>
</div></pre>
</p>
这就是我到目前为止所得到的,试图掩盖它,这样我就可以让白色背景与渐变一起使用。
html, body, .container { height: 100%; } body { margin: 0; font-family: system-ui; } .container { display: flex; flex-flow: column nowrap; max-width: 60ch; margin: auto; padding: 1rem; background-color: white; } .container::before { content: ''; position: fixed; inset: 0; background: linear-gradient(red, yellow); } .bubble { z-index: 1; min-width: 50px; width: fit-content; background-color: #eee; border-radius: 4px; padding: 0.5em; margin: 0.2em; text-wrap: balance; } .bubble.primary { color: white; background-color: transparent; background-blend-mode: multiply; align-self: end; text-align: end; }您可以从
.bubble中“放置阴影”:* { margin: 0; padding: 0; box-sizing: border-box; } .container { --gap: 20px; --width: 800px; --background: #fff; display: flex; flex-direction: column; max-width: var(--width); margin: 16px auto; padding: 0 16px; overflow: hidden; gap: var(--gap); box-shadow: 0 0 0 100vw var(--background); font-family: sans-serif; } .container:before { content: ''; inset: 0; position: fixed; z-index: -1; background: linear-gradient(purple, blue); } .bubble { max-width: 80%; background-color: lightgray; border-radius: 16px; padding: 8px 16px; box-shadow: 0 0 0 var(--gap) var(--background); position: relative; } .bubble::before, .bubble::after { content: ''; position: absolute; inset: calc(var(--gap) / -2) auto; background-color: var(--background); width: var(--width); } .bubble::before { right: 100%; } .bubble::after { left: 100%; } .bubble.primary { background-color: transparent; color: #fff; align-self: flex-end; }