Advertisement
  1. Web Design
  2. HTML & CSS

So erstellen Sie diagonale Linien mit CSS

Scroll to top
Read Time: 5 min

() translation by (you can also view the original English article)

Vor einigen Tagen erhielt ich meine Einladung zu Google Music. Beim Durchsuchen der App fiel mir ein kleiner, aber ordentlicher Trick auf, mit dem sie mit normalem CSS Registerkarten diagonale Ränder erstellen. Ich werde Ihnen heute zeigen, wie Sie dasselbe in Ihren Projekten tun können!


Bevorzugen Sie ein Video-Tutorial?


Schritt 1: Das Markup

Wir beginnen mit einem einfachen Markup.

1
2
3
<!DOCTYPE html> 
4
 
5
<html lang="en"> 
6
<head> 
7
   <meta charset="utf-8"> 
8
   <title>Demo</title> 
9
</head> 
10
<body> 
11
	<a href="#">New Music</a> 
12
	<div> 
13
		<h3> Hello, Everyone! </h3> 
14
		<p> 
15
		Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
16
		</p> 
17
	</div> 
18
</body> 
19
</html>

Wir werden diese Demo so einfach wie möglich halten.

bare markupbare markupbare markup

Schritt 2

Als nächstes wenden wir nur für das Layout eine Hintergrundfarbe und einen gewissen Abstand auf das body Element an.

1
2
body {
3
	background: #e3e3e3;
4
	font-family: sans-serif;
5
	width: 400px;
6
	margin: 100px auto;
7
}
SpacingSpacingSpacing

Schritt 3

Jetzt werden wir den Ankertag etwas stylen - eine neue Farbe anwenden, sie fett machen, einige Ränder hinzufügen usw.

1
2
a {
3
	padding: 10px;
4
	text-decoration: none;
5
	color: white;
6
	font-weight: bold;
7
	display: block;
8
	
9
	border-right: 30px solid red;
10
	border-bottom: 30px solid #4c4c4c; 
11
}
Style the anchor tagStyle the anchor tagStyle the anchor tag

Beachten Sie, dass beim Festlegen großer Randbreiten an dem Schnittpunkt der beiden eine diagonale Linie erstellt wird. Ich frage mich, ob wir diesen Schnittpunkt als Tabulatorkante verwenden können. Versuchen wir, height auf Null zu reduzieren.

1
2
a {
3
	padding: 10px;
4
	text-decoration: none;
5
	color: white;
6
	font-weight: bold;
7
	display: block;
8
	
9
	border-right: 30px solid red;
10
	border-bottom: 30px solid #4c4c4c;
11
12
   height: 0;
13
}
Zero heightZero heightZero height

Rück näher! Wenn wir jetzt die Zeilenhöhe des Ankertags anpassen, können wir den Text möglicherweise in dieses Feld einfügen!

1
2
a {
3
	padding: 10px;
4
	text-decoration: none;
5
	color: white;
6
	font-weight: bold;
7
	display: block;
8
	
9
	border-right: 30px solid red;
10
	border-bottom: 30px solid #4c4c4c; 
11
	
12
	height: 0;
13
	line-height: 50px;
14
}
Adjusting the line heightAdjusting the line heightAdjusting the line height

Schritt 4

Wir haben es geschafft! Aber diesen hässlichen roten Rand auf der rechten Seite brauchen wir natürlich nicht. Gibt es eine Möglichkeit anzugeben, dass die Hintergrundfarbe des body erhalten werden soll, ohne den Hex-Wert erneut anzugeben? Ja! Zu diesem Zweck verwenden wir das transparent Schlüsselwort.

1
2
a {
3
	padding: 10px;
4
	text-decoration: none;
5
	color: white;
6
	font-weight: bold;
7
	display: block;
8
	
9
	border-right: 30px solid transparent;
10
	border-bottom: 30px solid #4c4c4c; 
11
	
12
	height: 0;
13
	line-height: 50px;
14
}
Transparent BordersTransparent BordersTransparent Borders

Schritt 5

Das offensichtliche Problem an dieser Stelle ist, dass es etwas seltsam aussieht, wenn sich der Hintergrund über die gesamte Breite des Containers erstreckt. Der natürliche Instinkt würde meinen, das display auf inline zu aktualisieren. Wie das folgende Bild zeigt, funktioniert dies jedoch nicht.

display inlinedisplay inlinedisplay inline

Wir brauchen das Element, um seine block-artige Natur beizubehalten, damit es die Höhe 0 einhält. Die Antwort auf dieses Dilemma besteht darin, display: inline-block; zu verwenden oder das Ankertag mit float schweben zu lassen und dann die darauf folgenden Elemente mit clear zu löschen. Wir werden das erstere verwenden.

1
2
a {
3
	padding: 10px;
4
	text-decoration: none;
5
	color: white;
6
	font-weight: bold;
7
	display: inline-block;
8
	
9
	border-right: 30px solid transparent;
10
	border-bottom: 30px solid #4c4c4c; 
11
	
12
	height: 0;
13
	line-height: 50px;
14
}

Viel besser!


Schritt 6

Zuletzt lassen Sie uns das div darunter ein wenig stylen, und wir sind fast fertig!

1
2
div {
3
	 border: 1px solid #4c4c4c;	
4
	 border-top: 3px solid #4c4c4c;	   	 
5
	 padding: 20px;
6
}
Uh ohUh ohUh oh
In Safari
In Firefox

Oh oh. Wir haben ein Problem. Es sieht so aus, als ob Firefox und Webkit sich nicht genau einig sind, wie Elemente mit Nullhöhen und Anzeigen mit inline-block gerendert werden sollen.

Zugegeben hat mich dieses etwas ratlos gemacht. Ohne auf Hacks zurückzugreifen, konnte ich Firefox und Chrome nicht dazu bringen, das Layout genau zu rendern. Wenn Sie einen Weg finden, lassen Sie es mich in den Kommentaren wissen! Update - Informationen zur Problemumgehung finden Sie in den Kommentaren.


Schritt 7

Es gibt Möglichkeiten, Webkit-Browser mit CSS anzusprechen, aber es ist wichtig zu beachten, dass solche Tricks nur in Situationen des letzten Auswegs verwendet werden sollten. Mit anderen Worten, Kinder versucht dies nicht zu Hause, (es sei denn, ihr müsst). In unserer Situation scheint es klüger zu sein,floats zu verwenden, um dieses Layout zu erreichen. Lassen Sie uns dennoch etwas riskieren und mit einigen alternativen Techniken experimentieren.

Vielen ist nicht bewusst, dass Medienabfragen für Webkit-Browser verwendet werden können. Beobachten Sie, was passiert, wenn wir eine Webkit-spezifische Eigenschaft als Bedingung für die Medienabfrage verwenden ...

1
2
@media screen and (-webkit-animation) {
3
	a {
4
		margin-bottom: -4px;
5
	}
6
}

Tada! Es klappt. Denken Sie jedoch daran - greifen Sie nur nach diesem Trick, wenn Sie keine andere Option haben!


Das Endprodukt

Final ProductFinal ProductFinal Product

Es ist eine recht einfache Technik, aber dennoch eine, die wir alle in unseren Werkzeugkasten haben sollten. Haben Sie in Ihren Projekten solche netten Tricks angewendet? Lassen Sie es mich in den Kommentaren wissen!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.