Guten Tag, liebe Chabrowiten. Ich präsentiere Ihnen die Übersetzung eines Artikels von Chris Koehr.
Nehmen wir an, Sie benötigen einen Verlaufsrand um ein bestimmtes Element. Und Sie denken so:
- Hierfür gibt es keine einfache und offensichtliche CSS-API.
- Ich mache einfach ein Wrapper-Element mit einem linearen Verlaufshintergrund, und dann blockiert das innere Element den größten Teil dieses Hintergrunds, mit Ausnahme einer dünnen Fülllinie um ihn herum.
Es wird ungefähr so aussehen:
HTML
<div class="module-border-wrap"><div class="module"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero pariatur corporis quaerat voluptatum eos tempora temporibus nisi voluptates sed, exercitationem sequi dolore culpa incidunt accusamus, quasi unde reprehenderit ea molestias. </div></div>
SCSS body { height: 100vh; margin: 0; display: grid; place-items: center; background: #222; } .module-border-wrap { max-width: 250px; padding: 1rem; position: relative; background: linear-gradient(to right, red, purple); padding: 3px; } .module { background: #222; color: white; padding: 2rem; }
ErgebnisWenn Ihnen die Idee eines Wrapper-Elements nicht gefällt, können Sie ein Pseudoelement verwenden, bis der negative Z-Index-Wert in Ordnung ist (dies würde nicht passieren, wenn viele übergeordnete Elementanhänge mit eigenem Hintergrund vorhanden wären).
Hier ist ein Beispiel für die Festlegung des Randradius durch Stephen Shaw:
HTML
<div class="gradient-box"> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent bibendum, lorem vel tincidunt imperdiet, nibh elit laoreet felis, a bibendum nisl tortor non orci. Donec pretium fermentum felis, quis aliquet est rutrum ut. Integer quis massa ut lacus viverra pharetra in eu lacus. Aliquam tempus odio adipiscing diam pellentesque rhoncus. Curabitur a bibendum est. </p> </div>
SCSS .gradient-box { display: flex; align-items: center; //width: 50vw; width: 90%; margin: auto; max-width: 22em; position: relative; padding: 30% 2em; box-sizing: border-box; $border: 5px; color: #FFF; background: #000; background-clip: padding-box; border: solid $border transparent; border-radius: 1em; &:before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: -1; margin: -$border; border-radius: inherit; background: linear-gradient(to right, red, orange); } } html { height: 100%; background: #000; display: flex; } body { margin: auto; }
ErgebnisAber vergessen Sie nicht das border-image
, möglicherweise die dümmste CSS-Eigenschaft aller Zeiten. Sie können es verwenden, um Verlaufsränder auch auf verschiedenen Seiten zu erhalten:
HTML
<div class="module"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero pariatur corporis quaerat voluptatum eos tempora temporibus nisi voluptates sed, exercitationem sequi dolore culpa incidunt accusamus, quasi unde reprehenderit ea molestias. </div>
CSS body { height: 100vh; margin: 0; display: grid; place-items: center; background: #222; } .module { max-width: 250px; padding: 1rem; color: white; border-width: 3px; border-style: solid; border-image: linear-gradient( to bottom, red, rgba(0, 0, 0, 0) ) 1 100%; }
ErgebnisDie Verwendung von border-image
und border-image-slice
ist wahrscheinlich die einfachste Syntax zum Erstellen eines Verlaufsrahmens, aber leider nicht mit dem Rahmenradius kompatibel.
HTML
<div> <div class="on-light"> <button class="border-gradient border-gradient-purple"> I have a gradient </button> </div> <div class="on-dark"> <button class="border-gradient border-gradient-purple"> I have a gradient </button> </div> <div class="on-light"> <button class="border-gradient border-gradient-green"> I have a gradient </button> </div> <div class="on-dark"> <button class="border-gradient border-gradient-green"> I have a gradient </button> </div> </div>
SCSS button { background: none; text-decoration: inherit; font-family: system-ui; font-size: 1rem; padding: 1rem 2rem; } .border-gradient { border-image-slice: 1; border-width: 2px; } .border-gradient-purple { border-image: linear-gradient(to left, #743ad5, #d53a9d); } .border-gradient-green { border-image: linear-gradient(to left, #00C853, #B2FF59); } body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; > div { width: 100%; text-align: center; } > div > div { width: 100%; padding: 1rem; } } .on-dark { background: #222; button { color: white; } }
Ergebnis