Wie man HTML-Elemente mit Rahmen, Schatten und Umrissen in CSS gestaltet

Der Autor hat den Diversity in Tech Fund ausgewählt, um im Rahmen des Write for DOnations-Programms eine Spende zu erhalten.

Einführung

Das Arbeiten mit Schatten, Rahmen und Konturen ist ein wesentlicher Bestandteil der Webentwicklung und kann eine visuelle Definition um HTML-Elemente und Textelemente bieten. Das Erscheinungsbild von Rahmen und Schatten kann über fünf Haupt-CSS-Eigenschaften manipuliert werden: border, border-radius, box-shadow, text-shadow und outline. Schatten verleihen Tiefe und helfen dabei, Elemente hervorzuheben, während die border-Eigenschaften viele verschiedene visuelle Funktionen erfüllen können, von der Erstellung eines linearen Trennelements zwischen Inhalten bis zur Definition des Rasters eines Gitters. Die border-radius-Eigenschaft erstellt abgerundete Ecken an Kästen und kann sogar eine kreisförmige Form erstellen. Schließlich ist outline eine oft übersehene Eigenschaft, die einen Großteil der Funktionalität der border-Eigenschaft bietet, ohne den Fluss des Inhalts zu unterbrechen.

In diesem Tutorial werden Sie mit diesen Eigenschaften arbeiten, um einen Rechtshinweis für ein fiktives Weltraumtourismusunternehmen zu erstellen. Während der Demonstration erstellen Sie visuell ansprechende Container, indem Sie kantenbasierte Eigenschaften verwenden. Darüber hinaus werden Sie die Feinheiten komplexerer Werte berücksichtigen, wie z. B. mehrere Schatten und wie verschiedene Browser bestimmte Eigenschaften unterschiedlich implementieren können.

Voraussetzungen

Einrichten der Grundlagen von HTML und CSS

In diesem Abschnitt richten Sie die HTML-Basis für alle visuellen Stile ein, die Sie im Verlauf des Tutorials schreiben werden. Sie erstellen auch Ihre styles.css-Datei und fügen Stile hinzu, die das Layout des Inhalts festlegen.

Beginnen Sie damit, index.html in Ihrem Texteditor zu öffnen. Fügen Sie dann folgendes HTML zur Datei hinzu:

index.html
<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Travel Disclosure - Destination: Moon</title>
    <link href="styles.css" rel="stylesheet" />
  </head>
  <body>
  </body>
</html>

Es gibt viele Seiteneinstellungen, die im <head>-Element definiert sind. Das erste <meta>-Element legt den Zeichensatz fest, der für den Text verwendet werden soll. Auf diese Weise werden die meisten Sonderzeichen, wie Akzentzeichen, ohne spezielle HTML-Codes gerendert. Das zweite <meta>-Element gibt Browsern, insbesondere mobilen Browsern, an, wie die Breite des Inhalts behandelt werden soll; sonst wird der Browser eine Desktop-Breite von 960px simulieren. Das <title>-Element liefert dem Browser den Titel der Seite. Das <link>-Element lädt die CSS-Datei, in der Sie Ihre Styles im Verlauf dieses Tutorials schreiben werden.

Die Seite benötigt auch Inhalte, die gestaltet werden sollen. Für den rechtlichen Text verwenden Sie Beispielinhalte von Legal Ipsum als Platzhaltertext, der nur für Gestaltungszwecke gedacht ist.

Gehen Sie zurück zu index.html in Ihrem Texteditor und fügen Sie den hervorgehobenen HTML-Code aus dem folgenden Codeblock hinzu:

index.html
<!doctype html>
<html>
  ...
  <body>
    <section class="disclosure-alert">
      <header class="disclosure-header">
        <h2  class="disclosure-title"><em>Destination: Moon</em> Travel Disclosure</h2>
      </header>
      <div class="disclosure-content">
        <p>Although space travel is routine practice, there are many unknown possibilities that any traveller must be aware of before traveling with <em>Destination: Moon</em>. Agreeing to this disclosure of knowns is required prior to purchase of tickets with <em>Destination: Moon</em>. PLEASE, READ AND AGREE TO THE FOLLOWING DISCLOSURE OF TRAVEL UNKNOWNS BEFORE PROCEEDING TO PURCHASE.</p>
        <div class="legal-contents">
          <p>Effect of Termination. Upon termination, You agree not to use it under the terms of Sections 4(a) through 4(e) for that Covered Code, or any third party. Description of Modifications.<p>
          <p>You must make sure that you know you can do these things. To make sure the requirements of this Agreement. REQUIREMENTS A Contributor may participate in any way. Notwithstanding the foregoing, if applicable law or agreed to in writing, the Copyright Holder, but only to the terms applicable to Covered Code. Inability to Comply Due to Statute or Regulation.</p>
          <p>If it is impossible for You to the Recipient retains any such Additional Terms. Versions of This License. If you are re-using, b) a hyperlink (where possible) or URL to the terms of Sections 4(a) through 4(e) for that Work shall terminate if it fails to comply with the exception of content that is granting the License. License Terms 1.</p>
          <p>Grant of Patent Infringement. If you have knowledge of patent infringement litigation, then the only applicable Base Interpreter is a "commercial item" as defined in 48 C.F.R. Consistent with 48 C.F.R.</p>
          <p>U.S. Government End Users acquire Covered Code (Original Code and/or as part of a Larger Work; and b) allow the Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Distributor in writing of such Contributor, if any, to grant more extensive warranty protection to some or all of these conditions: (a) You must make it clear that any Modifications made by such Respondent, or (ii) withdraw Your litigation claim is resolved (such as Wikimedia-internal copying), it is Recipient's responsibility to secure any other exploitation. Program, and in any of the provisions set forth in Section 4(b), you shall terminate if it fails to comply with.</p>
          <p>Please note that these licenses do allow commercial uses of your company or organization, to others outside of this License Agreement), provided that You meet the following terms which differ from this License) and (b) You must duplicate the notice in Exhibit A in each changed file stating how and when you changed the files and the definitions are repeated for your past or future use of the Original Code; or 3) for infringements caused by: i) third party against the drafter will not be used as a handle): 1895.22/1011. This Agreement shall be held by the terms of this agreement. If any provision of this license which gives you legal permission to modify NetHack, or otherwise using this software in source and binary forms, with or without modification in printed materials or in related documentation, stating that you provide a service, including but not limited to the terms under which you distribute, wherever you describe the origin or ownership of such termination, the Recipient a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6b1 or any part of Derivative Works. If You initiate litigation by asserting a patent infringement against You in that instance.</p>
          <p>Effect of New York and the like. While this license document the following disclaimer in the Work contain all the conditions listed in Clause 6 above, concerning changes from the Work. If you created a Modification, you may at your option offer warranty protection to some or all of the Licensed Program as a product of your Modifications available to others outside of this License.</p>
          <p>Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted to Licensor for inclusion in the documentation and/or other rights consistent with this program; if not, write to the modified files to carry prominent notices stating that You distribute, all copyright, patent, trademark, and attribution notices from the Public Domain or from the Original Code; 2) separate from the Public Domain or from the Work, you may distribute a Compiled Work on their system exactly as it is being maintained, then ask the Current Maintainer to update their communication data within one month. If the program is free software; you can change the License will not have to defend and indemnify every other Contributor to control, and cooperate with the Source Code version of the Licensed Program, or any Contributor.</p>
        </div>
        <div class="button-group">
          <a href="#" class="button button-primary">
            Agree
          </a>
          <a href="#" class="button button-secondary">
            Disagree
          </a>
        </div>
      </div>
    </section>
  </body>
</html>

Speichern Sie Ihre Änderungen in index.html und öffnen Sie dann Ihren Webbrowser. Wählen Sie den Menüpunkt Datei und dann die Option Öffnen und laden Sie Ihre index.html-Datei im Browser. Das folgende Bild zeigt, wie dieser HTML-Code im Browser gerendert wird:

Erstellen Sie eine neue Datei namens styles.css im selben Verzeichnis wie index.html und öffnen Sie sie dann in Ihrem Texteditor. Diese Datei enthält alle im Tutorial verwendeten Styles. Der erste Satz von Styles wird eine allgemeine Ästhetik anwenden, von der aus Sie aufbauen werden. Wenden Sie den CSS-Code aus dem folgenden Codeblock auf Ihre styles.css-Datei an:

styles.css
html, body {
  height: 100%;
}

body {
  display: flex;
  margin: 0;
  font: 100% / 1.5 sans-serif;
  background: url("images/moon-bg.jpg") no-repeat fixed center / cover black;
}
.disclosure-alert {
  background-color: hsl(0, 0%, 95%);
  width: 85%;
  max-width: 48rem;
  margin: auto;
  color: hsl(0, 0%, 20%);
}
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
}
.disclosure-title {
  margin: 0;
  font-size: 2rem;
  line-height: 1.25;
}
.disclosure-content {
  margin: 1.5rem;
}
.legal-contents {
  margin-top: 1.5rem;
  background-color: white;
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
.button-group {
  margin-top: 1.5rem;
  display: flex;
  justify-content: center;
}
.button {
  display: inline-block;
  text-align: center;
  padding: 0.5rem 1rem;
  background: black;
  text-decoration: none;
  color: white;
  width: 50%;
  max-width: 8rem;
}
.button + .button {
  margin-left: 1.5rem;
}
.button-primary {
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
}
.button-primary:hover {
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
}
.button-secondary {
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
}
.button-secondary:hover {
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
}

Die Formatierung in dieser Datei legt das initiale Layout der Seite fest, mit einem zentrierten rechtlichen Hinweis, Buttons mit Abstand und gerendert mit einem linearen Verlauf, sowie einem Bild des Mondes als Hintergrund. Bevor Sie fortfahren, vergewissern Sie sich, dass Sie die Datei styles.css speichern.

Um das Bild anzuzeigen, das in der background-Eigenschaft des body-Regelsatzes verlinkt ist, benötigen Sie das Mond-Hintergrundbild. Zuerst erstellen Sie ein Verzeichnis images im selben Ordner wie Ihre index.html-Datei:

  1. mkdir images

Verwenden Sie Ihren Browser, um diese Datei in Ihr neu erstelltes images-Verzeichnis herunterzuladen, oder verwenden Sie den folgenden curl-Befehl, um sie über die Befehlszeile herunterzuladen:

  1. curl -sL https://assets.digitalocean.com/articles/68102/moon-bg.jpg -o images/moon-bg.jpg

Anschließend kehren Sie zu Ihrem Browser zurück und aktualisieren die Seite. Der Browser wird nun die Styles auf den Inhalt der Seite rendern und anwenden. Das folgende Bild zeigt, wie die gesamte Seite gerendert wird:

Die Länge des Inhalts macht die Seite sehr lang. Da es sich um einen rechtlichen Text handelt, kann der Inhalt von .legal-contents zu einem scrollbaren Bereich werden. Dies wird durch eine Kombination der Eigenschaften height, max-height und overflow erreicht.

Um einen scrollbaren Bereich zu erstellen, öffnen Sie styles.css in Ihrem Texteditor. Passen Sie dann die Höhe des rechtlichen Inhalts mit folgendem Code an:

styles.css
...
.legal-contents {
  height: 50vh;
  max-height: 20rem;
  overflow: auto;
  margin-top: 1.5rem;
  background-color: white;
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
...

In diesem Code haben Sie eine height-Eigenschaft im .legal-contents-Selektorblock erstellt und ihren Wert auf 50vh gesetzt, was 50 % der Höhe des Ansichtsfensters bedeutet. Sie haben auch eine max-height-Eigenschaft mit dem Wert 20rem erstellt. Schließlich haben Sie eine overflow-Eigenschaft mit dem Wert auto hinzugefügt, die eine Scrollleiste erstellt, wenn der Inhalt den Container überläuft.

Speichern Sie diese Ergänzungen in Ihrer styles.css-Datei, kehren Sie dann zu Ihrem Browser zurück und aktualisieren Sie index.html. Die Gesamthöhe der Seite und des Hauptcontainers hat sich verkleinert. Jetzt kann der Legal Ipsum-Text innerhalb seines zugewiesenen Containers gescrollt werden, wie in der folgenden Animation dargestellt:

Im Verlauf dieses Abschnitts haben Sie das primäre HTML eingerichtet, das Sie für den Rest des Tutorials verwenden werden. Sie haben auch einen scrollbaren Bereich mit der overflow-Eigenschaft eingerichtet. Im nächsten Abschnitt werden Sie mit der border-Eigenschaft arbeiten, um einen Rahmen für diese Container anzuwenden.

Verwendung der border-Eigenschaft

Die border-Eigenschaft ist eine der ursprünglichen Möglichkeiten, Stile auf den Rändern von Elementen anzuwenden. Sie wendet eine Linie in jeder Farbe auf den äußeren Umfang eines Behälters an. Der Wert der Eigenschaft besteht aus drei Komponenten: der Dicke, dem Stil und der Farbe. Die border-Eigenschaft wendet diese Werte auf alle vier Seiten eines Elements an. Sie können einzelne Seiten mit den Richtungsvariationen von border angeben, wie z.B. die border-top-Eigenschaft, die nur auf die Oberseite eines Elements angewendet wird.

Um mit der border-Eigenschaft zu arbeiten, öffnen Sie styles.css in Ihrem Texteditor und gehen Sie zum Klassenselektor .disclosure-alert. Fügen Sie innerhalb des Selektorblocks eine border-Eigenschaft mit einem Wert von 1px solid hsl(0, 0%, 0%) hinzu, wie im folgenden Codeblock hervorgehoben:

styles.css
...
.disclosure-alert {
  background-color: hsl(0, 0%, 95%);
  width: 85%;
  max-width: 48rem;
  margin: auto;
  color: hsl(0, 0%, 20%);
  border: 1px solid hsl(0, 0%, 0%);
}
...

Diese border-Eigenschaft ist eine Kurzschreibweise, was bedeutet, dass ihr Wert eine Kombination anderer Werte ist. In diesem Fall repräsentiert die Dicke von 1px den Wert der border-width-Eigenschaft. Dieser Wert kann jeder numerische Wert mit einer Einheit sein, zusammen mit einigen benannten Werten: thin, medium und thick. Als nächstes ist solid der Wert der border-style-Eigenschaft, der definiert, wie die Linie um das Element herum erscheinen wird, in diesem Fall als eine durchgehende, kontinuierliche Linie. Andere Werte für border-style sind dotted, dashed, double und none. Der letzte Wert definiert die border-color-Eigenschaft, die jeden gültigen Farbwert sein kann.

Speichern Sie Ihre Änderungen in styles.css, öffnen Sie dann index.html in einem Webbrowser. Der primäre Inhaltscontainer wird jetzt einen dünnen schwarzen Rahmen um ihn herum haben, der sich besonders deutlich über das Hintergrundbild des Mondes legt. Das folgende Bild zeigt, wie der Rahmen im Hauptinhaltsbereich erscheint:

Als nächstes können Sie die Rahmen-Eigenschaft verwenden, um ein Gefühl von Tiefe zu erzeugen, indem Sie einem Element Highlights und Schatten hinzufügen. Dies können Sie erreichen, indem Sie einen RichtungsRahmen auf einer Seite verwenden, der heller ist als die Hintergrundfarbe, und dann eine dunklere Farbe auf der benachbarten Seite.

Gehen Sie zurück zu styles.css in Ihrem Texteditor und navigieren Sie zum Klassen-Selektorblock .disclosure-header. Das linear-gradient() in der background-Eigenschaft definiert einen dunkellilanen Verlauf, der zu einem etwas dunkleren Farbton übergeht. Um mehr Tiefe als nur den Verlauf allein zu erzeugen, passen Sie den Rahmen mit folgendem Code an:

styles.css
...
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
}
...

Sie haben eine Rahmen-oben-Eigenschaft mit einem Wert von 1px solid hsl(300, 50%, 35%) hinzugefügt, der etwas heller ist als der Ausgangswert des Verlaufs. Als nächstes haben Sie eine Rahmen-unten-Eigenschaft mit einem Wert von 1px solid hsl(300, 50%, 5%) erstellt, der etwas dunkler ist als das Ende des Verlaufs.

Speichern Sie Ihre Änderungen in styles.css, kehren Sie dann zum Browser zurück und aktualisieren Sie index.html. Der lila Header-Hintergrund hat jetzt einen leichten lila Farbverlauf oben auf dem Header und einen leichten Schatten unten. Das folgende Bild zeigt, wie dies im Browser erscheinen wird:

Da border eine Kurzschreibweise ist, können zusätzliche Langschreibweisen hinzugefügt werden. Ein border kann angewendet werden, das die Breite und den Stil der beiden Button-Klassen definiert, während ein border-color auf die einzelnen Klassen angewendet werden kann.

Um mit border-color zu arbeiten, öffnen Sie styles.css in Ihrem Texteditor. Fügen Sie im Selektorblock für .button eine border-Eigenschaft mit einem Wert von 1px solid hinzu und fügen Sie dann eine border-color-Eigenschaft für .button-primary und .button-secondary hinzu:

styles.css
...
.button {
  ...
  border: 1px solid;
}
...
.button-primary {
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
  border-color: hsl(200, 100%, 15%);
}
.button-primary:hover {
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
  border-color: hsl(200, 100%, 10%);
}
.button-secondary {
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
  border-color: hsl(200, 10%, 15%);
}
.button-secondary:hover {
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
  border-color: hsl(200, 10%, 10%);
}

Dies definiert einen 1px breiten solid Stilrand für beide Buttons. Dann haben Sie eine border-color-Eigenschaft hinzugefügt, um die Farben für die .button-primary, .button-secondary und ihre zugehörigen :hover-Zustandsselektoren anzupassen.

Speichern Sie diese Änderungen in styles.css und aktualisieren Sie dann die Seite in Ihrem Webbrowser. Wie im folgenden Bild gezeigt, haben die Buttons jetzt eine etwas klarere Definition durch einen passenden dunkleren Farbrand:

Zuletzt ist jede border-Richtung ebenfalls eine Kurzschreibweise. Das bedeutet, dass -width, -style und -color jeweils auf eine Richtungseigenschaft angewendet werden können. Zum Beispiel wird die Langschreibweise border-right-color nur eine Farbe auf den rechten Seitenrand anwenden.

Um mit diesen Richtungs-Langhand border Eigenschaften zu arbeiten, kehren Sie zu styles.css in Ihrem Texteditor zurück. Gehen Sie zum .legal-contents Selektor-Block und setzen Sie die Breite und den Stil für alle vier Seiten des Rahmens und passen Sie dann die Farben jeder Seite an:

styles.css
...
.legal-contents {
  height: 50vh;
  max-height: 20rem;
  margin-top: 1.5rem;
  overflow: auto;
  background-color: white;
  border: 1px solid;
  border-top-color: hsl(0, 0%, 65%);
  border-bottom-color: hsl(0, 0%, 100%);
  border-right-color: hsl(0, 0%, 80%);
  border-left-color: hsl(0, 0%, 80%);
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
...

In diesem Code haben Sie border: 1px solid ans Ende der Datei hinzugefügt. Danach haben Sie zusätzlich die border-top-color, border-bottom-color, border-right-color und border-left-color Eigenschaften erstellt. Für die Werte haben Sie verschiedene hsl() Werte für Grautöne verwendet.

Speichern Sie Ihre Änderungen in styles.css und laden Sie dann die Seite im Browser neu. Der scrollbare Inhaltscontainer hat jetzt einen dunkelgrauen Rand oben, ein etwas helleres Grau an den Seiten und einen weißen Rand unten. Dies soll die Wahrnehmung erzeugen, dass der Inhalt hinter dem hellgrauen Hintergrund liegt und einen Effekt erzeugen, bei dem das Highlight am unteren Rand liegt, wie im folgenden Bild gezeigt:

In diesem Abschnitt haben Sie die border Eigenschaft und ihre verschiedenen Langhandvariationen verwendet. Sie haben mehrere Rahmen erstellt, die je nach Bedarf auf verschiedene Seiten angewendet wurden. Im nächsten Abschnitt werden Sie mit der border-radius Eigenschaft arbeiten, die es ermöglicht, die Ecken von Containern abzurunden.

Anwendung eines border-radius

Abgerundete Ecken waren bereits lange vor der border-radius-Eigenschaft ein Designästhetik auf dem Web. Diese Eigenschaft kann jede numerische Einheit oder Prozentsatzwert akzeptieren und ist eine Shorthand-Eigenschaft wie die margin– oder padding-Eigenschaften. Das bedeutet, dass jede Ecke individuell angepasst werden kann.

Um mit der border-radius-Eigenschaft zu arbeiten, öffnen Sie styles.css in Ihrem Texteditor. Gehen Sie zum .disclosure-alert-Selektorblock und zur border-radius-Eigenschaft. Setzen Sie dann den Wert auf 1,5rem, der diesen Wert auf alle vier Ecken der Eigenschaft anwendet. Der hervorgehobene CSS im folgenden Codeblock zeigt, wie dies geschrieben wird:

styles.css
...
.disclosure-alert {
  ...
  border: 1px solid hsl(0, 0%, 0%);
  border-radius: 1.5rem;
}
...

Speichern Sie diese Ergänzung in styles.css und öffnen oder aktualisieren Sie index.html in einem Webbrowser. Nur die unteren beiden Ecken werden abgerundet erscheinen, während die oberen beiden spitz bleiben. Das folgende Bild veranschaulicht, wie dies im Browser dargestellt wird:

Der Grund, warum nur zwei abgerundete Ecken sichtbar sind, liegt daran, wie sich nachgeordnete Elemente im Web miteinander verhalten. Der Browser neigt dazu, den Inhalt sichtbar zu halten. Die .disclosure-alert hat zwar vier abgerundete Ecken, aber weil sich .disclosure-header innerhalb des Elements befindet und keine abgerundeten Ecken hat, überlappt es die abgerundeten Ecken. Eine schnelle Lösung besteht darin, overflow: hidden zu .disclosure-alert hinzuzufügen, wodurch der Container alle nachgeordneten Container und Inhalte abschneidet. Dieser Ansatz kann jedoch dazu führen, dass erforderliche Inhalte unleserlich oder unsichtbar werden. Eine bessere Praxis ist es, eine border-radius auf die Klasse .disclosure-header anzuwenden, um die Kurve der Ecke ihres Vorgängers anzupassen.

Um die überlappenden Ecken anzupassen, kehren Sie zu styles.css in Ihrem Texteditor zurück. Gehen Sie zum Selector-Block .disclosure-header und fügen Sie die border-radius-Eigenschaft hinzu. Da nur die oberen zwei Ecken angepasst werden müssen, beträgt der Wert 1,5rem 1,5rem 0 0:

styles.css
...
.disclosure-header {
  ...
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
  border-radius: 1.5rem 1.5rem 0 0;
}
...

Das erweiterte Format dieses Werts wendet eine 1,5rem-Kurve auf die oberen linken und oberen rechten Ecken an.

Speichern Sie Ihre Änderungen in styles.css und aktualisieren Sie index.html im Browser. Der lila Header hat jetzt eine abgerundete Ecke und deckt nicht den Hauptcontainer ab. Allerdings ist ein neues Problem aufgetreten, da ein weißer Streifen des übergeordneten Containers hinter dem lila Header hervorlugt, wie im folgenden vergrößerten Bild gezeigt:

Die Ecken sowohl für .disclosure-alert als auch für .disclosure-header haben die gleiche Größe von 1,5rem, aber ihre Breiten unterscheiden sich. Dieser Größenunterschied wird durch den Rand links und rechts vom Element .disclosure-alert verursacht. Da die Breite des Randes auf beiden Seiten 1px beträgt, beträgt der Größenunterschied 2px oder 0,125rem. Um die Kurven anzugleichen, muss der Randradius für .disclosure-header um 0,125rem kleiner sein als aktuell. Ändern Sie die Randradius-Werte von 1,5rem auf 1,375rem, wie im folgenden Code-Block hervorgehoben:

styles.css
...
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
  border-radius: 1.375rem 1.375rem 0 0;
}
...

Speichern Sie diese Änderung in styles.css und aktualisieren Sie dann die Seite im Webbrowser. Der schmale weiße Streifen ist jetzt verschwunden und die Kurven der beiden Elemente treffen sich an der richtigen Stelle. Der folgende vergrößerte Screenshot zeigt, wie sich diese Kurven ausrichten:

Zuletzt wenden Sie einen abgerundeten Eckradius auf die Schaltflächen am unteren Rand des Hauptcontainers an. Diese Schaltflächen haben eine Pillenform, mit einer langen, flachen Ober- und Unterseite und vollständig abgerundeten Seiten. Um dies zu erreichen, muss der Wert des Randradius größer sein als die Höhe des Elements.

Um eine pillenförmige Schaltfläche zu erstellen, öffnen Sie styles.css in Ihrem Texteditor. Fügen Sie im .button-Selektorblock die border-radius-Eigenschaft hinzu und setzen Sie den Wert auf 2rem. Dies kann eine beliebige Zahl sein, solange sie größer ist als die berechnete Höhe, die sich aus der Kombination von font-size, line-height, padding und border-width ergibt, die die Gesamthöhe eines Elements beeinflussen können. Der hervorgehobene CSS-Code im folgenden Codeblock zeigt, wo Sie diese Eigenschaft hinzufügen können:

styles.css
...
.button {
  ...
  border: 1px solid;
  border-radius: 2rem;
}
...

Es gibt zwei Dinge, die bei diesem Ansatz zu beachten sind. Erstens wird kein height-Wert für dieses Element festgelegt. Das Festlegen eines height-Werts sollte vermieden werden, da Inhalte außerhalb des Containers fließen können und werden. Durch das Vermeiden einer festgelegten height kann die Schaltfläche wachsen, um dem gesamten Inhalt zu entsprechen. Zweitens funktioniert dies nicht korrekt mit einem prozentualen Wert. Prozentuale Werte bei einer border-radius-Eigenschaft krümmen einen Prozentsatz der Höhe und der Breite und erzeugen eine ovale Form anstelle einer abgerundeten Ecke.

Speichern Sie Ihre Änderungen in styles.css, kehren Sie dann zum Browser zurück und aktualisieren Sie index.html. Die Seite wird jetzt zwei längliche, pillenförmige Schaltflächen anzeigen, wie im folgenden Bild dargestellt:

In diesem Abschnitt haben Sie die border-radius-Eigenschaft verwendet, um abgerundete Ecken auf mehreren Elementen anzuwenden und festgestellt, dass eine border-radius nicht verhindert, dass untergeordnete Elemente den gekrümmten Raum verlassen. Sie haben auch den Wert eines border-radius angepasst, um der Breite eines Elements zu entsprechen, wenn mehrere abgerundete Elemente übereinander geschichtet sind. Im nächsten Abschnitt werden Sie die text-shadow-Eigenschaft verwenden, um Schlagschatten auf Textinhalt anzuwenden.

Verwendung der text-shadow-Eigenschaft

Das Anwenden von Schatten auf Text hat viele Anwendungen in der täglichen Webentwicklung. Schatten können Tiefe erzeugen, einen Glüheffekt erzeugen oder Text hervorheben an Stellen, wo er übersehen werden könnte. In diesem Abschnitt wenden Sie text-shadow auf mehrere Elemente an, um verschiedene visuelle Effekte zu erzeugen.

Die text-shadow-Eigenschaft besteht aus bis zu vier Werten: Versatz auf der X-Achse, Versatz auf der Y-Achse, Unschärferadius und Farbe. Als Beispiel könnten die Werte so aussehen: 2px 4px 10px rot. Von diesen vier Werten sind nur die Versatzwerte erforderlich. Die Schattenfarbe ist standardmäßig die Farbe des Textes.

Um mit text-shadow zu arbeiten, beginnen Sie mit der Erstellung eines Glüheffekts auf dem Header. Öffnen Sie styles.css in Ihrem Texteditor und gehen Sie zum Klassen-Selektor .disclosure-header. Fügen Sie innerhalb des Selektorenblocks die folgende text-shadow-Eigenschaft hinzu:

styles.css
...
.disclosure-header {
  ...
  border-radius: 1.375rem 1.375rem 0 0;
  text-shadow: 0 0 0.375rem hsl(300, 50%, 50%);
}
...

A glow effect means the color will emanate from every edge of the text, so the x- and y-axis offset values here are set to 0. You set the blur for the glow to 0.375rem (equivalent to 6px) to give a subtle halo of color to the text. Lastly, the color value was set to a bit darker than the color property: hsl(300, 50%, 50%).

Fügen Sie diese Ergänzung zu Ihrer styles.css-Datei hinzu. Öffnen Sie dann index.html in einem Webbrowser. Der fettgedruckte Überschriftstext auf dem lila Farbverlauf hat jetzt einen mittellila Schein um ihn herum. Das folgende Bild veranschaulicht, wie dieser Effekt im Browser dargestellt wird:

Als nächstes können mehrere Schatten auf Textelemente platziert werden, um einen geprägten Effekt auf Text zu erzeugen. Dieser Effekt wird erzielt, indem ein hellerer Schatten unterhalb des Objekts und ein dunklerer Schatten oberhalb platziert werden.

Um einen geprägten Effekt zu erstellen, kehren Sie zu styles.css in Ihrem Texteditor zurück. Der Effekt wird den Buttons am unteren Rand des Containers hinzugefügt. Für die Selektoren .button-primary, .button-primary:hover, .button-secondary und .button-secondary:hover fügen Sie eine text-shadow-Eigenschaft hinzu. Überprüfen Sie den hervorgehobenen CSS-Code im folgenden Codeblock für die Werte:

styles.css
...
.button-primary {
  border: 1px solid hsl(200, 100%, 5%);
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
  text-shadow: 0 1px hsl(200, 100%, 50%),
               0 -1px hsl(200, 100%, 5%);
}
.button-primary:hover {
  border: 1px solid hsl(200, 100%, 0%);
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
  text-shadow: 0 1px hsl(200, 100%, 45%),
               0 -1px hsl(200, 100%, 0%);
}
.button-secondary {
  border: 1px solid hsl(200, 10%, 5%);
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
  text-shadow: 0 1px hsl(200, 10%, 50%),
               0 -1px hsl(200, 10%, 5%);
}
.button-secondary:hover {
  border: 1px solid hsl(200, 10%, 0%);
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
  text-shadow: 0 1px hsl(200, 10%, 45%),
               0 -1px hsl(200, 10%, 0%);
}

Der erste Schatten ist ein hellerer eingelassener Highlight unten. Dies wird mit dem 0 1px-Versatz erreicht, dann die hellere Version der Hintergrundverlaufsfarben. Als nächstes haben Sie den Schatten über dem Text mit einem 0 -1px-Versatz erstellt, der den Schatten um 1px nach oben zieht und eine dunklere Variation der Hintergrundfarben verwendet.

Speichern Sie diese Änderungen in styles.css und aktualisieren Sie dann die Seite in Ihrem Webbrowser. Der Text innerhalb der Buttons hat jetzt einen leichten Highlight unter dem Text und einen leichten Schatten über dem Text. Die Kombination dieser text-shadow-Werte erzeugt den geprägten Effekt, wie im folgenden Bild dargestellt:

In diesem Abschnitt haben Sie die text-shadow-Eigenschaft auf einige Elemente angewendet. Sie haben einen Leuchteffekt auf dem Header und einen geprägten Effekt mit mehreren Schatten auf den Schaltflächen erstellt. Im nächsten Abschnitt werden Sie Schatten auf HTML-Elemente mit der box-shadow-Eigenschaft anwenden.

Hinzufügen von box-shadow zu Elementen

Genau wie die text-shadow-Eigenschaft ermöglicht die box-shadow-Eigenschaft auch, dass Elemente und Container Schatten haben können. Die box-shadow-Eigenschaft hat zwei zusätzliche Funktionen, die Sie im Verlauf dieses Abschnitts erkunden werden, darunter die Möglichkeit, die Ausbreitung des Schattens zu steuern und den Schatten innerhalb des Elements zu setzen.

Um mit der box-shadow-Eigenschaft zu arbeiten, öffnen Sie styles.css in Ihrem Texteditor. Fügen Sie im .disclosure-alert-Selektorblock die box-shadow-Eigenschaft hinzu. Genauso wie bei text-shadow sind die Versatzwerte auf der X- und Y-Achse erforderlich, und wenn keine Farbe angegeben ist, wird der Wert der color-Eigenschaft verwendet. Für diesen ersten box-shadow setzen Sie die Versatzwerte auf 0, den Unschärfeeffekt auf 0.5rem und die Farbe auf ein dunkles hsl(300, 40%, 5%), wie im folgenden Codeblock hervorgehoben:

styles.css
...
.disclosure-alert {
  ...
  border-radius: 1.5rem;
  text-shadow: 0 0 0.375rem hsl(300, 50%, 50%);
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%);
}
...

Speichern Sie die Änderungen an styles.css und aktualisieren Sie die Seite in Ihrem Webbrowser. Es gibt nun einen fast schwarzen Schatten, der sich vom Container ausbreitet. Beachten Sie auch, dass der Schatten die Kurven respektiert und den Sie mit der border-radius-Eigenschaft erstellt haben. Das folgende Bild zeigt, wie dies im Browser gerendert wird:

Gehen Sie dann zurück zu styles.css und beginnen Sie damit, einen komplexeren Effekt zu erstellen, indem Sie zwei zusätzliche große Leuchteffekte zum box-shadow hinzufügen. Fügen Sie zwischen jedem neuen Schatten ein Komma hinzu und setzen Sie jeden auf eine y-Achsen-Verschiebung von 0.5rem. Legen Sie dann große Unschärfeeffekte fest und verwenden Sie hellere Varianten des Blau und Lila aus der Farbpalette, wie im folgenden Code-Block hervorgehoben:

styles.css
...
.disclosure-alert {
  ...
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%),
              0 0.5rem 6rem hsl(200, 40%, 30%),
              0 0.5rem 10rem hsl(300, 40%, 30%);
}
...

Die Reihenfolge dieser Schatten ist wichtig. Der erste Schatten mit der fast schwarzen Farbe wird über den neuen Schatten präsentiert, und jeder nachfolgende Schatten wird hinter den nächsten gelegt.

Speichern Sie Ihre Änderungen an styles.css und aktualisieren Sie die Seite in Ihrem Browser. Wie im folgenden Bild dargestellt, erzeugt die Kombination mehrerer Schatten einen einzigartigen Effekt:

Die Blur-Spread-Funktion der box-shadow-Eigenschaft kann verwendet werden, um ein Gefühl von Tiefe zu erzeugen. Der Spread-Wert akzeptiert sowohl positive als auch negative Werte. Ein negativer Spread-Wert in Verbindung mit einer starken Verschiebung und Unschärfe erzeugt einen Schatten, der sich weit entfernt und weit vom Ausgangscontainer entfernt anfühlt.

Gehen Sie zurück zu styles.css in Ihrem Texteditor. Fügen Sie zwischen dem dunklen kleinen Schatten und dem größeren blauen Schatten im .disclosure-alert-Selektor den folgenden hervorgehobenen CSS-Code aus dem Code-Block hinzu:

styles.css
...
.disclosure-alert {
  ...
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%),
              0 6rem 4rem -2rem hsl(300, 40%, 5%),
              0 0.5rem 6rem hsl(200, 40%, 30%),
              0 0.5rem 10rem hsl(300, 40%, 30%);
}
...

Diese Ergänzung zum Schattenset hält den X-Achsenversatz bei 0, bewegt aber die Y-Achse beträchtlich auf 6rem. Als nächstes ist der Weichzeichnungseffekt nicht so groß wie der Glanz, sondern hat eine anständige Größe von 4rem. Dann kommt der Wert für die Verbreitung des Weichzeichnungseffekts, der in diesem Fall auf -2rem eingestellt ist. Der Standardwert für die Verbreitung ist 0, was dem Container entspricht. Bei -2rem wird die Verbreitung von außen nach innen vom Container weg kondensieren, um einen visuellen Tiefeneffekt zu erzeugen.

Speichern Sie Ihre Änderungen in styles.css, dann aktualisieren Sie index.html im Browser. Der Schatten hat eine tiefviolette Farbe, die den Eindruck erweckt, dass die Hauptinhaltbox weit über die Oberfläche des Mondes schwebt, wie im folgenden Bild dargestellt:

Eine weitere Verwendung eines box-shadow ist die Erzeugung eines leichten Highlight- und Schattenkanteneffekts, ähnlich wie Sie es zuvor mit der border-Eigenschaft im Header gemacht haben. Der Vorteil der Verwendung eines box-shadow anstelle einer border besteht darin, dass er das Boxmodell nicht beeinflusst, was Verschiebungen im Inhaltfluss verursacht. Es kann auch in Verbindung mit einer border verwendet werden. Wenn Sie diesen Effekt mit einer border verwenden, muss der Wert inset zum box-shadow hinzugefügt werden, damit der Schatten innerhalb des Containers liegt.

Um einen inset-Wert auf den box-shadow anzuwenden, öffnen Sie styles.css in Ihrem Texteditor. Dieser Effekt wird den Schaltflächen hinzugefügt, daher wenden Sie diese Stile auf .button-primary, .button-primary:hover, .button-secondary und .button-secondary:hover an. Wie beim text-shadow besteht dies aus einer Kombination von 0 1px und 0 -1px Versatz. Der Unterschied besteht darin, dass das Wort inset am Anfang oder am Ende des Werts hinzugefügt werden kann, wie im folgenden Codeblock hervorgehoben:

styles.css
...
.button-primary {
  ...
  text-shadow: 0 1px hsl(200, 100%, 50%),
               0 -1px hsl(200, 100%, 5%);
  box-shadow: inset 0 1px hsl(200, 100%, 50%),
              inset 0 -1px hsl(200, 100%, 15%);
}
.button-primary:hover {
  ...
  text-shadow: 0 1px hsl(200, 100%, 45%),
               0 -1px hsl(200, 100%, 0%);
  box-shadow: inset 0 1px hsl(200, 100%, 45%),
              inset 0 -1px hsl(200, 100%, 10%);
}
.button-secondary {
  ...
  text-shadow: 0 1px hsl(200, 10%, 50%),
               0 -1px hsl(200, 10%, 5%);
  box-shadow: inset 0 1px hsl(200, 10%, 50%),
              inset 0 -1px hsl(200, 10%, 15%);
}
.button-secondary:hover {
  ...
  text-shadow: 0 1px hsl(200, 10%, 45%),
               0 -1px hsl(200, 10%, 0%);
  box-shadow: inset 0 1px hsl(200, 10%, 45%),
              inset 0 -1px hsl(200, 10%, 10%);
}

Speichern Sie diese Änderungen in styles.css und aktualisieren Sie dann index.html in Ihrem Browser. Die Schaltflächen haben jetzt eine Hervorhebung und einen Schatten, ähnlich wie der Text. Dies in Kombination mit dem Farbverlaufshintergrund erzeugt einen einfachen, aber markanten Effekt für Schaltflächen. Das folgende Bild zeigt, wie dies im Browser gerendert wird:

Zuletzt können Sie auch einen Unschärfe-Ausbreitungswert auf einen eingefügten Schatten anwenden. Die Ausbreitung verschiebt den Startpunkt des Unschärfeeffekts von der Kante nach außen, aber bei Verwendung von inset verschiebt sich der Startpunkt der Ausbreitung nach innen. Das bedeutet, dass bei einem negativen Wert für die Ausbreitung auf ein inset der Schatten aus dem Sichtbereich des Elements herausragt. Die nach außen gerichtete Ausbreitung der Ausbreitung kann einen Schatten erzeugen, der wie ein kurzer Farbverlauf aussieht. Dies kann die Illusion erzeugen, dass ein Element abgerundete Kanten hat, da der Schatten unterhalb des Inhalts des Elements angewendet wird.

Um diesen Effekt zu erstellen, öffnen Sie styles.css in Ihrem Texteditor. Navigieren Sie zum Klassenselektor .legal-contents und fügen Sie eine box-shadow-Eigenschaft hinzu. Dieser Schatten wird aus drei Schatten bestehen. Der erste wird einen kurzen Schatten um den gesamten Container setzen, und die nächsten beiden werden einen länglichen Lichtschatten oben und unten am Element bereitstellen. Der hervorgehobene CSS-Code im folgenden Codeblock zeigt, wie dies eingerichtet ist:

styles.css
...
.legal-contents {
  ...
  font-family: "Times New Roman", serif;
  box-shadow: 0 0 0.25rem hsl(0, 0%, 80%) inset,
              0 4rem 2rem -4rem hsl(0, 0%, 85%) inset,
              0 -4rem 2rem -4rem hsl(0, 0%, 85%) inset;
}
...

Speichern Sie Ihre Änderungen in styles.css und aktualisieren Sie dann die Seite im Browser. Die Schatten erzeugen nun einen Effekt, der den Rechtstext erscheinen lässt, als wäre er wie ein Fenster in den Container gesetzt. Die Schatten tragen auch dazu bei, die border-Farben zu verstärken, die diesem Element zugewiesen wurden. Das folgende Bild veranschaulicht, wie dies im Browser gerendert wird:

In diesem Abschnitt setzen Sie die box-shadow-Eigenschaft in die Praxis um. Sie haben auch die Unschärfeverbreitung und die inset-Funktionen von box-shadow verwendet, um mehr Gestaltungsoptionen zu ermöglichen. Im letzten Abschnitt werden Sie die outline-Eigenschaft implementieren und dann box-shadow verwenden, um eine vielseitigere outline zu erstellen.

Verwendung der outline-Eigenschaft

Die letzte Eigenschaft, die die Ränder von Elementen beeinflusst, ist die outline-Eigenschaft. Über alle Browser hinweg wird der :focus-Zustand von Elementen unter Verwendung der outline-Eigenschaft erstellt. Die Implementierung des Standard-:focus-Stils variiert jedoch in jedem Browser erheblich. Die outline-Eigenschaft ähnelt der border-Eigenschaft, weist jedoch zwei wesentliche Unterschiede auf: Sie hat keine Richtungsvariationen und beeinflusst nicht das Box-Modell. Der letzte dieser beiden Unterschiede macht es ideal für :focus-Stile, da es einen visuellen Indikator für das aktive Element bietet, ohne den Fluss des Inhalts zu stören.

Um den Standard des Browser-:focus-Zustands zu beobachten, öffnen Sie index.html in Ihrem Browser. Verwenden Sie die TAB-Taste, um die Seite zu durchsuchen, bis eines der unteren Schaltflächen den Fokus hat. Je nach verwendetem Browser können die Standard-:focus-Stile sichtbar oder unsichtbar sein. Zum Beispiel zeigt Firefox eine weiße gestrichelte Kontur, die jedoch auf dem hellgrauen Hintergrund nicht wahrnehmbar ist. Das folgende Bild zeigt von links nach rechts, wie der Standard-Fokusstil in Firefox, Safari und Chrome aussieht:

Um Ihren eigenen :focus-Zustand mit der outline-Eigenschaft anzupassen, öffnen Sie styles.css in Ihrem Texteditor. Gehen Sie zum .button-Klassen-Selektor und fügen Sie die outline-Eigenschaft hinzu:

styles.css
...
.button {
  ...
}
.button:focus {
  outline: 0.25rem solid hsl(200, 100%, 50%);
}
...

Wie bei der border-Eigenschaft umfasst der Wert für die outline-Eigenschaft einen Breite-, Stil- und Farbwert. Da das Ziel eines Fokuszustands darin besteht, die Aufmerksamkeit auf ein Element zu lenken, erhöht sich die Breite auf 0,25rem, was 4px entspricht. Als nächstes setzen Sie den Stil auf solid, damit der Fokuszustand dem von Safari und Chrome ähnelt. Schließlich setzen Sie die Farbe auf ein tiefes Blau mit hsl(200, 100%, 50%).

Speichern Sie Ihre Änderungen in styles.css, kehren Sie dann zu Ihrem Browser zurück und aktualisieren Sie die Seite. Erneut bestimmt der Browser, wie die outline dargestellt wird. Das folgende Bild zeigt, wie diese Stile in Firefox, Safari und Chrome von links nach rechts aussehen:

In allen drei Browsern wird die outline-Eigenschaft recht unterschiedlich dargestellt. Firefox hält sich eng um die gesamte abgerundete Form des Buttons. Safari erstellt eine rechtwinklige Box, die jedoch die Kanten des Buttons berührt. Chrome ähnelt Safari, fügt jedoch etwas zusätzlichen Platz zwischen dem Button und der outline hinzu.

Um einen Stil zu erstellen, der in allen Browsern wie der von Firefox aussieht, ist es erforderlich, anstelle von outline box-shadow zu verwenden.

Um mit der Erstellung eines individuelleren :focus-Zustands zu beginnen, kehren Sie zu Ihrer styles.css-Datei in Ihrem Texteditor zurück. Das erste, was Sie tun müssen, ist den standardmäßigen outline-Stil des Browsers zu deaktivieren, indem Sie den Wert im .button:focus-Selektor auf none ändern, wie im folgenden Codeblock hervorgehoben:

styles.css
...
.button {
  ...
}
.button:focus {
  outline: none;
}
...

Als Nächstes gehen Sie zu den button-primary:hover und button-secondary:hover Selektoren und fügen Sie ein Komma gefolgt von einem :focus Zustandsvariation hinzu, wie im folgenden Code-Block hervorgehoben:

styles.css
...

.button-primary {
  ...
}
.button-primary:hover,
.button-primary:focus {
  ...
}
.button-secondary {
  ...
}
.button-secondary:hover,
.button-secondary:focus {
  ...
}

Zum Schluss erstellen Sie zwei neue Selektoren für den :focus jedes Buttons, .button-primary:focus und .button-secondary:focus. Innerhalb der neuen Selektorblöcke fügen Sie eine neue box-shadow-Eigenschaft mit denselben Einfügungsschatten wie bei ihren :hover, :focus Gegenstücken hinzu. Fügen Sie dann einen weiteren Schatten zur Serie mit den Versatz- und Unschärfe-Parametern, die auf 0 gesetzt sind, hinzu. Fügen Sie anschließend eine Ausbreitung von 0.25rem hinzu, was eine solide, nicht verschwommene Linie um das Element erzeugt. Fügen Sie schließlich dieselbe Farbe zu beiden Instanzen hinzu. Der hervorgehobene CSS-Code im folgenden Code-Block zeigt, wie dies geschrieben wird:

styles.css
...

.button-primary {
  ...
}
.button-primary:hover,
.button-primary:focus {
  ...
}
.button-primary:focus {
  box-shadow: inset 0 1px hsl(200, 100%, 45%),
              inset 0 -1px hsl(200, 100%, 10%),
              0 0 0 0.25rem hsl(200, 100%, 50%);
}
.button-secondary {
  ...
}
.button-secondary:hover,
.button-secondary:focus<^> {
  ...
}
.button-secondary:focus {
  box-shadow: inset 0 1px hsl(200, 10%, 45%),
              inset 0 -1px hsl(200, 10%, 10%),
              0 0 0 0.25rem hsl(200, 100%, 50%);
}

Speichern Sie diese Änderungen in styles.css und kehren Sie zum Browser zurück, um index.html zu aktualisieren. Jetzt, wenn Sie die TAB-Taste verwenden, um durch die Seite zu navigieren. Unabhängig vom Browser sehen die :focus-Stile der Buttons jetzt gleich aus. Das folgende Bild zeigt, wie die box-shadow-Version einer Umrandung im Browser zusammen mit der gesamten Seite aussieht:

Dieser letzte Abschnitt hat Sie mit der outline-Eigenschaft und wie sie von jedem Browser auf unterschiedliche Weise verwendet wird, vertraut gemacht. Mindestens ein :focus-Indikator ist für die Barrierefreiheit erforderlich, und die outline-Eigenschaft erledigt die Aufgabe. Darüber hinaus haben Sie auch einen fortgeschritteneren und visuell konsistenten :focus-Stil erstellt, indem Sie eine box-shadow mit einem großen Ausbreitungswert erstellt haben.

Abschluss

Das Stylen der Ränder von Elementen ermöglicht es dem Design einer Website, Vielfalt und Aufmerksamkeit zu gewinnen. Die border-Eigenschaft kann dabei helfen, Definition und Trennung zwischen Inhalten zu bieten. Die border-radius-Eigenschaft mildert die Ästhetik ab und hilft, die Haltung des Designs zu definieren. Schatten auf Texten und Boxen bringen Tiefe und helfen, die Aufmerksamkeit auf Inhalte zu lenken. Schließlich bietet die outline-Eigenschaft zugängliche Möglichkeiten, um Elemente mit Tastaturfokus hervorzuheben. In diesem Tutorial haben Sie all diese Eigenschaften verwendet, um eine visuell interessante und benutzbare Webseite zu erstellen. Das Verständnis jeder dieser Eigenschaften und wann und wie man sie einsetzt, wird helfen, alle Arten von Front-End-Schnittstellenproblemen zu lösen und neue Erfahrungen zu schaffen.

Wenn Sie weitere CSS-Tutorials lesen möchten, probieren Sie die anderen Tutorials in der How To Style HTML with CSS-Serie aus.

Source:
https://www.digitalocean.com/community/tutorials/how-to-style-html-elements-with-borders-shadows-and-outlines-in-css