Kann man CSS auf die Hälfte eines Zeichens anwenden? Wir analysieren einen cleveren Trick mit JavaScript
\n\nHaben Sie sich jemals gefragt, ob man die linke Hälfte des Buchstabens „A“ rot und die rechte blau färben kann? Oder dafür sorgen, dass der obere Teil des Textes halbtransparent ist und der untere nicht? Wenn Sie Stack Overflow geöffnet und sich gefragt haben: „Is it possible to apply CSS to half of a character?“, dann sind Sie nicht allein. Diese Frage hat tausende Aufrufe gesammelt, und die Antwort darauf ist eine echte Herausforderung für Webentwickler.
\n\nAuf den ersten Blick scheint es, dass CSS nur mit ganzen Elementen arbeitet. Aber mit Hilfe von JavaScript und ein paar Tricks können wir den Browser austricksen und die Illusion eines „halbierten“ Stils erzeugen. Heute analysieren wir drei funktionierende Methoden: von der einfachen Textverdopplung bis hin zur Nutzung von SVG und clip-path. Los geht's!
Warum kann CSS ein Zeichen nicht „durchschneiden“?
\n\nBevor wir in den Code eintauchen, wollen wir die Natur des Problems verstehen. CSS arbeitet mit Blöcken (Boxen). Jedes Zeichen ist Teil eines Textflusses, und der Browser rendert es als eine Einheit. Es gibt keine Eigenschaft wie half-color oder half-background. Selbst die Pseudoelemente ::before und ::after arbeiten auf der Ebene des gesamten Elements, nicht seines Inhalts.
Aber das bedeutet nicht, dass die Aufgabe unlösbar ist. Wir können JavaScript zum Aufteilen des Textes verwenden und die Stile visuell auf jede Hälfte anwenden. Hauptsache, die Lesbarkeit und Semantik bleiben erhalten.
\n\nMethode 1: Textverdopplung mit clip-path (CSS + JS)
\n\nDer beliebteste Trick, der auf Stack Overflow diskutiert wird, ist das Überlagern von zwei Textkopien und das Zuschneiden jeder Hälfte mit clip-path. Lassen Sie uns das mit JavaScript umsetzen.
Schritt 1. HTML-Struktur
\n\n<div class="half-text" data-text="Hallo, Welt!"></div>\n\nSchritt 2. JavaScript-Logik
\n\nconst container = document.querySelector('.half-text');\nconst text = container.dataset.text;\n\n// Erstellen von zwei Textkopien\nconst leftPart = document.createElement('span');\nleftPart.textContent = text;\nleftPart.className = 'half left';\n\nconst rightPart = document.createElement('span');\nrightPart.textContent = text;\nrightPart.className = 'half right';\n\ncontainer.appendChild(leftPart);\ncontainer.appendChild(rightPart);\n\nSchritt 3. CSS-Stile
\n\n.half-text {\n position: relative;\n font-size: 48px;\n font-weight: bold;\n display: inline-block;\n}\n\n.half {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.half.left {\n color: #ff6b6b;\n clip-path: inset(0 50% 0 0); /* linke Hälfte */\n}\n\n.half.right {\n color: #4ecdc4;\n clip-path: inset(0 0 0 50%); /* rechte Hälfte */\n}\n\nErgebnis: Jeder Buchstabe ist genau in der Mitte geteilt. clip-path schneidet die Zeichen entlang einer vertikalen Linie. Der Trick funktioniert perfekt mit nichtproportionalen Schriftarten, aber bei normalen Schriftarten kann es zu einer leichten Verschiebung kommen – diese lässt sich leicht durch Hinzufügen von letter-spacing: 0 beheben.
Methode 2: Aufteilen des Textes in Zeichen (fortgeschrittenes JS)
\n\nWenn Sie den Stil nicht auf den gesamten Block, sondern auf jeden einzelnen Buchstaben anwenden möchten (z. B. obere Hälfte von „A“ grün, untere Hälfte gelb), müssen Sie mit jedem Zeichen einzeln arbeiten. Hier kommt JavaScript zur Textstilisierung ins Spiel.
\n\nIdee
\nWir zerlegen die Zeichenkette in ein Array von Zeichen, setzen jedes Zeichen in einen eigenen <span> und duplizieren es erneut, diesmal jedoch auf Buchstabenebene. Dann wenden wir clip-path auf jeden Span an.
function splitTextToHalf(selector) {\n const element = document.querySelector(selector);\n const originalText = element.textContent;\n element.innerHTML = '';\n\n // Erstellen eines Containers für jeden Buchstaben\n for (let char of originalText) {\n const wrapper = document.createE