Das <span> Element
Das <span>-Element ist ein generischer Inline-Container für Text-Inhalte. Es hat keine semantische Bedeutung und wird hauptsächlich verwendet, um Teile von Text zu stylen oder mit JavaScript zu manipulieren.
Syntax
<span>Inline-Text</span>
Grundlegende Eigenschaften
Element-Typ
- Display:
inline(bleibt im Textfluss) - Kategorie: Flow content, phrasing content
- Erlaubter Inhalt: Phrasing content (Text und inline Elemente)
- Eltern-Elemente: Jedes Element, das phrasing content erlaubt
<span> vs <div> - Der Unterschied
| Eigenschaft | <span> | <div> |
|---|---|---|
| Display | inline | block |
| Zeilenumbruch | Nein | Ja (beginnt neue Zeile) |
| Breite/Höhe | Nicht direkt setzbar* | Frei setzbar |
| Verwendung | Innerhalb von Text | Container/Layout |
| Verschachtelung | Kann nicht block-Elemente enthalten | Kann alles enthalten |
*Nur mit display: inline-block oder display: block
Wann verwenden?
- ✅ Styling von Textteilen innerhalb eines Absatzes
- ✅ Highlighting oder Hervorhebung von Wörtern
- ✅ Sprachauszeichnung mit
lang-Attribut - ✅ Als Hook für JavaScript (z.B. Counter, Tooltips)
- ✅ Icon-Wrapper in Button/Links
Wann NICHT verwenden?
- ❌ Für Block-Layout (nutze
<div>) - ❌ Wenn semantische Elemente passen:
<strong>für wichtigen Text<em>für Betonung<mark>für Markierungen<code>für Code
Attribute
Globale Attribute
Wie <div> unterstützt <span> alle globalen HTML-Attribute:
Wichtigste Attribute:
class - CSS-Klassen
<p>Dies ist <span class="highlight">wichtig</span>!</p>
id - Eindeutiger Identifikator
<p>Preis: <span id="price">9.99</span>€</p>
style - Inline-CSS
<span style="color: red; font-weight: bold;">Fehler</span>
lang - Sprache für Textteil
<p>Er sagte: "<span lang="fr">Bonjour!</span>"</p>
title - Tooltip
<span title="HyperText Markup Language">HTML</span>
data-* - Custom Attributes
<span data-tooltip="Zusatzinfo" data-position="top">Info</span>
Default CSS-Eigenschaften
Browser wenden standardmäßig diese CSS-Regeln auf <span> an:
span {
display: inline;
/* Box Model */
margin: 0;
padding: 0;
border: 0;
/* Sizing (nur für Inline!) */
width: auto; /* Kann nicht direkt gesetzt werden */
height: auto; /* Kann nicht direkt gesetzt werden */
/* Verhalten */
vertical-align: baseline;
line-height: inherit;
}
Wichtige Verhaltensweisen:
- Inline-Flow: Bleibt im Textfluss
- Keine Breite/Höhe: Width/Height haben keine Wirkung (außer mit
display: inline-block) - Nur horizontales Padding/Margin: Vertikales Padding/Margin überlappen benachbarte Zeilen
- Zeilenumbruch: Kann bei langen Texten umbrechen
Praktische Beispiele
1. Text-Highlighting
<p>
Die <span class="keyword">wichtigste</span> Regel in HTML ist
<span class="keyword">Semantik</span>.
</p>
.keyword {
background-color: yellow;
padding: 2px 4px;
font-weight: 600;
}
2. Text-Farben
<p>
Status: <span class="status status-success">Aktiv</span>
</p>
<p>
Status: <span class="status status-error">Fehler</span>
</p>
.status {
padding: 4px 8px;
border-radius: 4px;
font-size: 0.875rem;
font-weight: 600;
}
.status-success {
color: #047857;
background-color: #d1fae5;
}
.status-error {
color: #dc2626;
background-color: #fee2e2;
}
3. Counter mit JavaScript
<p>
Sie haben <span id="cart-count">0</span> Artikel im Warenkorb.
</p>
<button onclick="addToCart()">Hinzufügen</button>
function addToCart() {
const counter = document.getElementById('cart-count');
const currentCount = parseInt(counter.textContent);
counter.textContent = currentCount + 1;
}
4. Icon mit Text
<button class="btn">
<span class="icon">⭐</span>
<span class="text">Favorit</span>
</button>
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 20px;
border: none;
background: #3b82f6;
color: white;
border-radius: 6px;
cursor: pointer;
}
.icon {
font-size: 1.2rem;
}
.text {
font-weight: 500;
}
5. Tooltip
<p>
HTML ist eine
<span class="tooltip">
Auszeichnungssprache
<span class="tooltip-text">
Markup Language: Definiert Struktur, nicht Funktion
</span>
</span>.
</p>
.tooltip {
position: relative;
text-decoration: underline;
text-decoration-style: dotted;
cursor: help;
}
.tooltip-text {
visibility: hidden;
position: absolute;
bottom: 125%;
left: 50%;
transform: translateX(-50%);
background-color: #333;
color: white;
padding: 8px 12px;
border-radius: 6px;
font-size: 0.875rem;
white-space: nowrap;
z-index: 1;
}
.tooltip:hover .tooltip-text {
visibility: visible;
}
6. Preis-Anzeige
<div class="price">
<span class="currency">€</span>
<span class="amount">49</span>
<span class="cents">.99</span>
</div>
.price {
display: inline-flex;
align-items: baseline;
font-family: Arial, sans-serif;
}
.currency {
font-size: 1.2rem;
font-weight: 600;
margin-right: 2px;
}
.amount {
font-size: 2.5rem;
font-weight: 700;
}
.cents {
font-size: 1.2rem;
font-weight: 600;
}
Best Practices
✅ DO (Empfohlen)
<!-- Styling von Textteilen -->
<p>
Dies ist <span class="highlight">sehr wichtig</span> zu wissen.
</p>
<!-- Sprach-Auszeichnung -->
<p>
Das französische Wort <span lang="fr">Bonjour</span> bedeutet "Guten Tag".
</p>
<!-- JavaScript-Hooks -->
<p>
Temperatur: <span id="temp" data-unit="celsius">25</span>°C
</p>
<!-- Icon-Container -->
<span class="icon" aria-hidden="true">🔍</span>
❌ DON'T (Vermeiden)
<!-- Layout mit span (nutze div) -->
<span style="display: block; width: 100%; height: 300px;">
<!-- ❌ Nutze stattdessen <div> -->
</span>
<!-- Semantische Alternativen ignorieren -->
<span class="bold">Wichtig</span> <!-- ❌ Nutze <strong> -->
<span class="italic">Betont</span> <!-- ❌ Nutze <em> -->
<span class="code">console.log()</span> <!-- ❌ Nutze <code> -->
<!-- Verschachtelte Block-Elemente -->
<span>
<div>Inhalt</div> <!-- ❌ Ungültig! -->
</span>
Häufige Fehler
1. Width/Height ohne Display-Änderung
<!-- ❌ Hat keine Wirkung -->
<span style="width: 200px; height: 50px;">Text</span>
<!-- ✅ Richtig -->
<span style="display: inline-block; width: 200px; height: 50px;">
Text
</span>
2. Vertikales Margin bei Inline-Span
<!-- ❌ Vertikales Margin wirkt nicht wie erwartet -->
<span style="margin: 20px 0;">Text</span>
<!-- ✅ Nutze inline-block oder padding -->
<span style="display: inline-block; margin: 20px 0;">Text</span>
3. Block-Elemente in Span
<!-- ❌ Ungültig -->
<span>
<div>Inhalt</div>
<p>Absatz</p>
</span>
<!-- ✅ Richtig -->
<div>
<div>Inhalt</div>
<p>Absatz</p>
</div>
Inline vs Inline-Block vs Block
Wenn du mehr Kontrolle brauchst, kannst du display ändern:
display: inline (Standard)
span {
display: inline;
/* ❌ Width/Height wirken nicht */
/* ⚠️ Nur horizontales Margin */
}
display: inline-block
span {
display: inline-block;
/* ✅ Width/Height funktionieren */
/* ✅ Margin/Padding funktionieren */
/* ✅ Bleibt im Textfluss */
}
display: block
span {
display: block;
/* ✅ Wie ein <div> */
/* ⚠️ Beginnt auf neuer Zeile */
}
Accessibility (Barrierefreiheit)
ARIA-Attribute
<!-- Visuell versteckter Text für Screenreader -->
<button>
<span aria-hidden="true">🗑️</span>
<span class="sr-only">Löschen</span>
</button>
<!-- Live-Updates -->
<p>
Status: <span role="status" aria-live="polite" id="status">
Wird geladen...
</span>
</p>
<!-- Tooltip-Beschreibung -->
<span
role="tooltip"
id="help-text"
aria-label="Hilfetext"
>
Mehr Informationen
</span>
Screenreader-Only Text
<span class="sr-only">
Diesen Text sehen nur Screenreader
</span>
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
Browser-Kompatibilität
✅ Vollständig unterstützt in allen Browsern:
- Chrome (alle Versionen)
- Firefox (alle Versionen)
- Safari (alle Versionen)
- Edge (alle Versionen)
- Internet Explorer 6+
Verwandte Elemente
Semantische Alternativen (bevorzugen!)
<strong>- Wichtiger Text (fett)<em>- Betonter Text (kursiv)<mark>- Hervorgehobener Text (Highlighter)<code>- Code-Snippets<kbd>- Tastatureingaben<abbr>- Abkürzungen mit Tooltip<time>- Datumsangaben<small>- Kleingedrucktes
Wann welches Element?
<!-- Wichtigkeit/Betonung -->
<strong>Sehr wichtig</strong> <!-- ✅ Semantisch -->
<span class="bold">Text</span> <!-- ❌ Nur visuell -->
<!-- Hervorhebung -->
<mark>Markiert</mark> <!-- ✅ Semantisch -->
<span class="highlight">Text</span> <!-- ❌ Nur visuell -->
<!-- Code -->
<code>console.log()</code> <!-- ✅ Semantisch -->
<span class="code">Text</span> <!-- ❌ Nur visuell -->
Performance-Tipps
1. Vermeide zu viele Wrapper
<!-- ❌ Zu viele Spans -->
<p>
<span><span><span>Text</span></span></span>
</p>
<!-- ✅ Minimal -->
<p>
<span class="styled">Text</span>
</p>
2. CSS-Klassen statt Inline-Styles
<!-- ❌ Inline-Styles -->
<span style="color: red;">Fehler</span>
<span style="color: red;">Fehler</span>
<span style="color: red;">Fehler</span>
<!-- ✅ CSS-Klasse -->
<span class="error">Fehler</span>
<span class="error">Fehler</span>
<span class="error">Fehler</span>
.error {
color: red;
}
Zusammenfassung
Das <span>-Element ist:
- ✅ Ein Inline-Container für Text
- ✅ Perfekt für Styling von Textteilen
- ✅ Bleibt im Textfluss
- ⚠️ Nicht semantisch - nutze semantische Alternativen, wenn möglich
- ⚠️ Width/Height funktionieren nur mit
inline-blockoderblock
Merksatz:
"
<span>ist wie<div>, aber inline. Nutze es für Text-Styling, nicht für Layout!"
Faustregel:
- Brauchst du einen Container innerhalb von Text? →
<span> - Brauchst du einen Container um Blöcke? →
<div>
Weiterführende Ressourcen
Tipps & Tricks
Highlight Text mit mark statt span
<!-- ❌ OK -->
<p>Dies ist <span style="background: yellow;">wichtig</span></p>
<!-- ✅ Besser (semantisch) -->
<p>Dies ist <mark>wichtig</mark></p>
Multiple Classes
<span class="badge badge-primary badge-lg">NEU</span>
.badge { padding: 2px 8px; border-radius: 4px; }
.badge-primary { background: blue; color: white; }
.badge-lg { font-size: 1.2em; }
Tooltip mit title-Attribut
<span title="Cascading Style Sheets">CSS</span>
Beim Hover erscheint ein Tooltip!
Gut gemacht! 🎉
Du hast "Das <span> Element - Inline-Container für Text" abgeschlossen
Artikel bewerten
Bitte einloggen um zu bewerten
Das könnte dich auch interessieren
Das <a> Element - Links und Navigation
Vollständige Referenz zum HTML <a> (Anchor) Element: Attribute, Link-Typen, Sicherheit, Accessibility und Best Practices
Das <button> Element - Interaktive Schaltflächen
Vollständige Referenz zum HTML <button> Element: Typen, Attribute, States, Accessibility, Button vs Link und Best Practices
Das <div> Element - Container für Block-Inhalte
Vollständige Referenz zum HTML <div> Element: Syntax, Attribute, Default-Styling, Best Practices und praktische Beispiele