Christian Heilmann hatte neulich ein interessantes CSS-Problem. Die Idee war, Überschriften um 90 Grad zu drehen und sie links neben einem Inhaltsblock auszurichten, anstatt oben.

Einfach, oder?
Sollte ziemlich einfach sein, oder? Absolut positioniere die Überschrift in der oberen linken Ecke (damit sie keinen vertikalen Platz einnimmt) und drehe sie dann von ihrer oberen linken Ecke um 90 Grad mit CSS-Transforms. Ja... das ist cool, aber hier ist das Problem: viel mehr Browser unterstützen absolute Positionierung als Transforms. Das ist problematisch, denn in den Fällen, in denen es um diese Browser geht, werden die Überschriften dann auf dem Inhalt liegen und ihn verdecken.

So würde ich es machen: Feature Detection
Ich denke, der beste Weg, damit umzugehen, ist die Feature Detection mit Modernizr. Erstelle einen schnellen Custom Build, der nach Transforms testet, lade ihn ganz oben auf der Seite, und wende dann nur die absolute Positionierung und die Transforms (und andere Tweaks) an, wenn du dich in einem Browser befindest, der damit umgehen kann.
Und somit...
Das vollständige CSS
aside {
position: relative;
}
aside h3 {
background: #369;
color: #fff;
padding: 5px 10px;
margin: 0 0 10px 0;
}
/* Class name via Modernizr */
.csstransforms aside {
border-left: 34px solid #369;
/* Make a little room */
padding-left: 10px;
}
.csstransforms aside h3 {
/* Abs positioning makes it not take up vert space */
position: absolute;
top: 0;
left: 0;
/* Border is the new background */
background: none;
/* Rotate from top left corner (not default) */
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-ms-transform: rotate(90deg);
-o-transform: rotate(90deg);
}
Demo ansehen Dateien herunterladen
Die Schwäche, die bei dieser Technik übrig bleibt, ist, dass wenn die Überschrift länger als der verfügbare Platz ist, sie nicht die Höhe des Asides ausgleicht, um das zu kompensieren. Es gibt wirklich keine Möglichkeit, das nur mit CSS zu tun (man kann nicht die Höhe von etwas so einstellen, dass sie der Breite von etwas entspricht, im Grunde). Fürs Protokoll, man könnte JavaScript dafür verwenden.
Können wir das ohne Modernizr machen?
Christian et al. wollten Modernizr nicht verwenden (aus Gründen, die ich mir beim besten Willen nicht erklären kann ;). Lennart Schoors kam in den Kommentaren seines Posts auf diese Technik, bei der die Absatz-Elemente *auch* transformiert (verschoben) wurden. Standardmäßig gibt es eine Menge leerer Platz oben im Aside, und die Transformation verschiebt sie nach oben, um diesen Platz zu füllen. Ohne Transforms bleibt die Lücke bestehen und schafft Platz für die absolut positionierte Überschrift. Ziemlich schlau!
Der einzige Nachteil, den ich sehen kann, ist, dass er sich speziell auf Absatz-Elemente bezieht. In einer realen Umgebung kann man sich nicht darauf verlassen, daher schreibt man entweder einen Selektor, der alle möglichen zu verschiebenden Elemente abdeckt, oder man verwendet einen nicht-semantischen Wrapper. Außerdem unterliegt dies der gleichen Schwäche, wie ich sie oben in Bezug auf die Länge der Überschriften beschrieben habe.
Verbesserungen willkommen!
Ich bin mir nicht sicher, ob es wirklich eine rein CSS-basierte Methode gibt, die in allen Situationen funktioniert. Sicherlich keine, die jeden glücklich macht. Ich denke, Lennart Schoors Methode gefällt mir am besten.
Ich würde wahrscheinlich so designen, als ob keine Transforms verfügbar wären, und dann JavaScript den Text drehen und den zugehörigen Inhalt verschieben lassen, wenn nötig. Klar, man braucht JavaScript, um die wirklich schönen Dinge zu sehen, aber es sollte für alle trotzdem gut aussehen.
Rotation ist auch im Internet Explorer seit 5.5 verfügbar, mit der Matrix und dem Rotationsfilter. Der Matrixfilter ist besser, da er alle 0-360 Grad ermöglicht, die Rotation nur in Schritten von 90 Grad.
CSS3Please.com hat einen großartigen Rechner für diesen schwierigen Filter!
Coole Technik. Ich denke, der Text sollte so gedreht werden, dass er leichter zu lesen ist. So ist er nicht gerade barrierefrei, oder vielleicht bin ich das nur.
Was meinst du mit gedreht? Würde es nicht mehr Platz einnehmen, wenn du ein langes Wort hast. Vielleicht verstehe ich deine Aussage nicht richtig.
Ich meine, damit jeder Buchstabe in seiner richtigen Ausrichtung bleibt, so dass die Buchstaben übereinander gestapelt sind, aber nicht auf der Seite liegend.
Wie
H
E
A
D
I
N
G
Meiner Meinung nach und was mir in der Schule beigebracht wurde, ist gestapelter Text (was du gezeigt hast) in den meisten Ausrichtungen schwieriger zu lesen als normale Zeilenkopie. Die Augen des Betrachters assoziieren Buchstabenformationen, die es dem Gehirn ermöglichen, die Wörter zu lesen, ohne jeden Buchstaben lesen zu müssen. Ich glaube, dass du diese Assoziation mit gestapeltem Text verlieren würdest.
Barry, ich verstehe, was du meinst, und es macht Sinn, da Transforms nicht für ältere Browser wie Internet Exploder verfügbar sind.
Wenn du die Buchstaben so stapelst, müsstest du auch eine Schriftart mit fester Breite verwenden. Ich musste das einmal für einen Kunden machen. Es sah abscheulich aus...
Wäre es nicht sinnvoller, die Buchstaben stattdessen mittig auszurichten?
Eine Sache, die mir aufgefallen ist: Ich neige dazu, meinen Kopf nach links (nicht nach rechts) zu drehen, um vertikalen Text zu lesen. In diesem Fall scheint der Text "rückwärts". Ich hätte es lieber von unten nach oben lesbar, wie bei deinem Masthead.
Ich habe keine Ahnung, wie verbreitet das ist, oder ob ich eine Ausnahme bin (da Buchrücken normalerweise von oben nach unten beschriftet sind).
Ja, dein Text sollte immer von rechts (und von unten) lesbar sein
Also sind Drehungen zwischen: 270° (-90°) und 360° (= 0°) für Text die Regel, die ich immer anwende.
Bei Drehungen um wenige Grad ist diese Regel nicht wichtig
Aber dann brauchst du
left: -30px;
unten:0;
um es wieder richtig zu positionieren
und du musst einen Weg finden, es oben statt unten zu platzieren, weil Titel oben sein sollten. (Ich konnte keinen guten Weg finden...)
Das ist eine Sprachfrage, im Französischen ist der Buchrücken von unten nach oben beschriftet und im Englischen umgekehrt. Das kann eine ziemliche Plackerei sein, wenn man eine mehrsprachige Website hat, aber wenn nicht, denke ich, dass die meisten Leute an das Lesen von oben nach unten gewöhnt sind.
Nun, ich beschloss, mich an der Verbesserung beider Lösungen zu versuchen.
Also präsentiere ich dieses Fiddle.
Es behebt das Höhenproblem, der Hintergrund wird sich an die Höhe des Inhalts anpassen. Mein Problem damit ist, dass mehr Browser :before unterstützen als Transforms, daher würde ich Modernizr zusammen mit dem CSS verwenden, um die Unterstützung für Transforms zu prüfen.
Ich denke, einige cleverere Leute mit mehr Zeit können es verbessern :)
Oh, ich habe vergessen zu erwähnen, dass es die Beschränkung des Inhalts auf nur P-Tags behebt, aber ich bin mir nicht sicher, ob es das gut behebt. Die Verwendung von * könnte einige Leistungsprobleme mit sich bringen, yada yada yada, und ich kann nicht ganz verstehen, warum P-Tags die korrekte Positionierung haben und das H2-Tag nicht. Ach ja, noch mehr Dinge zum Verbessern, schätze ich.
Oh, aktualisiert mit Modernizr, das auf Transform-Unterstützung prüft. Das Fiddle. Funktioniert jetzt *viel* besser.
Wir verwenden dasselbe Konzept auf unserer neuen Startseite auf http://www.macprime.ch für einen Content-Slider
Ich bin mir nicht sicher, ob das ein Bug ist oder nicht, Stefan, aber auf deinem Content-Slider. Wenn ich meine Maus schnell von links nach rechts bewege und am linken Rand des Sliders stoppe, erscheint eine leere Folie.
Ich benutze Chrome 1.4 auf XP SP3
Nur zur Info
Ja, ich sehe es auch, aber es gibt ein Bild von einer Art Bulldozer, das erscheint, also gehe ich davon aus, dass es beabsichtigt ist...?
Ja, das haben wir auch bemerkt, deshalb haben wir dieses Bulldozer-Bild dort platziert ;-) ... Nun, das Problem ist, dass aufgrund der CSS-Transition beim Hover-Effekt der Browser/die Engine tatsächlich zu langsam ist, um die gehoverte 'Registerkarte' zu maximieren UND alle anderen flüssig zu minimieren ... wenn wir die Transition entfernen, funktioniert es, aber natürlich ist es alles andere als flüssig ... :-/ ... Vielleicht hat jemand hier einen Tipp?
Es ist eigentlich ein Bagger :)
Ich habe einen ähnlichen Effekt auf dieser Seite erzielt (aber zuerst JavaScript in deinem Browser deaktivieren und dann über die Bilder fahren)
http://www.david-goliath.com/ad_uottawa01_en.html
Was ich getan habe, um diesen Fehler zu beheben, ist, dass alle Bilder verkleinert werden, aber das letzte (das immer vollformatig ist). Wenn du also über die Bilder auf der linken Seite fährst, schieben sie das rechte Bild aus dem Viewer.
Vielleicht funktioniert es nicht genau so für dich ... aber es könnte dir helfen, die perfekte Lösung zu finden.
Super grobes Demo.
Diese Technik verwendet einen Selektor mit vergleichbarer Browserunterstützung wie Transforms, die :nth-of-type Pseudo-Klasse mit dem Wert 'n', um für alle Übereinstimmungen auszulösen. Sicher, es ist hacky, aber es ist reine CSS "Feature Detection".
Was? Keine Verwendung von CSS3's
dass mit etwas overflow hidden, um den Platz zu begrenzen, oder etwas schickes Javascript, um die Containerhöhe zu erkennen und die Überschrift abzuschneiden, und du wärst besser auf die Zukunft vorbereitet.
Nein?
Ja. Mann, du bist der Hammer. Danke.
Es sind Dinge wie diese, die mich wirklich erkennen lassen, wie viel Design im Web trotz all der Fortschritte immer noch durch die zugrundeliegende Technologie begrenzt ist.
Es ist aber seltsam, weil ich mir dieser Einschränkungen nicht einmal bewusst bin, wenn ich vorläufige Designs erstelle. Ich stoße selten auf Probleme, bei denen CSS meine Designs fast fehlerfrei bewältigen kann.
Ich habe dieses Fiddle erstellt und es sehr schnell in IE7/8 getestet (nur den Aside in ein Div geändert, damit es in IE7/8 funktioniert) http://jsfiddle.net/Gabri/t9u26/2/ mit Lea Verous Trick http://leaverou.me/2011/05/rule-filtering-based-on-specific-selectors-support/ und ich denke, es funktioniert
IE unterstützt writing-mode z.B. .rotate{ writing-mode: tb-rl} oben unten rechts links.
Wenn die Verwendung von Modernizr problematisch ist, vielleicht eine Feature-Erkennung auf dem Server? Wir könnten eine Liste von Browsern mit Features erstellen und dann den Browser auf dem Server erkennen und prüfen, ob er CSS-Transforms unterstützt.
Ich habe dieses Problem vor über einem halben Jahr gelöst und eine Cross-Browser-Lösung gefunden, aber ich habe keinen "semantischen" Code (oder sogar HTML5) verwendet.
Funktioniert in allen gängigen Browsern (IE7+, Opera, Safari/Chrome, Firefox).
Wenn jemand interessiert ist, kann er es hier live sehen: http://potterymili.cz (die Website ist unfertig und wird es nie sein).
Hallo,
Vielen Dank
Hallo,
Coole Technik. Ich denke, der Text sollte gedreht werden, damit er leichter zu lesen ist.
[email protected]
Vielen Dank
Ich verstehe nicht, wie man einen Tag über die Verteidigung und Förderung der Verwendung von semantischen Klassen schreiben und am nächsten Tag über die Förderung der Verwendung von Modernizr. Wenn es eine Sache gibt, die Modernizr (und die meisten anderen Skripte dieser Art tun), dann ist es das Einfügen von vielen unsemantischen Klassennamen?
Wie ich in diesem Beitrag sagte, glaube ich nicht an semantische Klassen, aber ich glaube an Klassennamen, die Sinn ergeben. Und nicht nur sind die Modernizr-Klassennamen unsemantisch, sondern sie ergeben auch keinen Sinn außerhalb der Verwendung des Skripts; wenn du Modernizr von der Website entfernst, sind die Klassen völlig unabhängig von allem.
Versteh mich nicht falsch, Modernizr ist ein großartiges Skript und ich habe es gelegentlich benutzt, wenn ich in Eile war, aber persönlich würde ich es nicht als Standard oder Best Practice fördern.
Aber das ist NICHT, was Chris hier sagt... er löst nur ein Problem. Zum Zeitpunkt der Erstellung dieses Artikels ist es die einzige Wahl, abgesehen von einer rein JavaScript-Lösung, die nicht annähernd so "perfekt" ist wie Modernizr.
Um heutzutage Webdesigner zu sein, muss man sich an die "Gesetze des Internets" halten UND (was noch wichtiger ist) "das tun, was der Kunde will". Warum sollte man mehr Zeit mit dem Schreiben von benutzerdefinierten Skripten für einmalige Designjobs verbringen, wenn es andere, kostengünstigere Wege gibt, es zu erledigen. Es ist nicht so, als ob er sagen würde, wirf einfach alles in eine Tabelle oder richte ein Bildersatz-Skript für jede Überschrift ein.
Aktuelle Einschränkungen erfordern, dass ein moderner Designer Standards predigt, aber in einer nicht-standardmäßigen Umgebung arbeitet. Strebe nach Idealismus, wenn möglich, den Rest der Zeit musst du es einfach zum Laufen bringen!
@Douglas: Ich stimme dir voll und ganz zu, was die Debatte Standards gegen "mach es einfach fertig" angeht.
Aber Chris sagt, ich zitiere:
[...] wollte Modernizr nicht verwenden (aus Gründen, die ich mir beim besten Willen nicht erklären kann ;)
Deshalb habe ich geantwortet. Ich kann mir vorstellen, warum er es nicht verwenden möchte. Und Chris sollte es auch, wegen dem, was er hier geschrieben hat: https://css-tricks.de/13423-semantic-class-names/
In diesem Fall würde ich dem Kunden raten (falls eine Beratung nötig ist), Bilder zur Drehung des Textes zu verwenden, wie wir es früher immer getan haben.
CSS3 ist bei dieser Funktion noch nicht ausgereift genug, um sie zu verwenden. Modernizr nur einzubringen, um "am Puls der Zeit" zu sein, ist nur die Verwendung von etwas zum Selbstzweck und gleichzeitig öffnest du dich für Nicht-Standards/Nicht-Best-Practices.
Funktioniert nicht in Opera Mini
Könntest du das screenshotten oder "funktioniert nicht" besser beschreiben?
Ein Tipp (im Einklang mit Paul Irishs Empfehlung) ist es, moderne Stile für alle Browser zu schreiben und nur die no-* Klassen für Fallbacks zu verwenden. Ansonsten greifen moderne Browser immer noch auf Modernizr zurück, um die Stile anzuwenden.
Schöne Technik! Das Drehen des Textes, damit man ihn besser lesen kann, würde es perfekt machen.
In IE6/IE7 saß der Text der Überschriften auf dem Inhalt und verdeckte ihn.
Das ist eine Übertreibung. Ich mache das seit 6 Jahren ohne JavaScript.
Ich drehe einfach meine Überschrift mit IrfanView, speichere sie als headerL.jpg und float sie.
Das dauert weniger Zeit als das Schreiben dieses Kommentars.
Mach einfach ein JPG von der gesamten Website, Mann, warum überhaupt programmieren.
Das ist bissig, aber ich will einen Punkt machen. Wenn ein Redesign kommt und du/neue Leute irgendeinen visuellen Aspekt dieser Überschriften ändern wollen, müssen sie neue JPGs erstellen, und das ist verdammt unpraktisch.
Chris, lange nicht mehr die Seite besucht wegen einiger verrückter 3G-Proxy-Konfigurationsprobleme.. Ich möchte nur etwas sagen, die neue Website sieht rockig aus, Mann! Danke, dass du diese Schönheit Wirklichkeit werden lassen hast :)
Nun, wenn du den Header-Text hartkodierst, damit er gedreht wird...
...wie wäre es, wenn du CSS
min-heighthinzufügst, um die Mindesthöhe des Containers festzulegen? Zum Beispiel, in Christians Fiddle habe ich versucht, die Überschrift für den zweiten Aside (den ersten transformierten) zuÜberschrift und Kram und Kram und KRAMzu ändern undstyle="min-height: 16em;"zum enthaltendenasidehinzuzufügen. Das ergab ein funktionales, visuell akzeptables Ergebnis.Und oh ja, paläolithische Browser unterstützen
min-heightnicht. Buh, verdammich. Es gibt immer noch David Walshs Workaround für Internet Exploder 6 (und früher,$GOTTbehüte; oder vielleicht arbeitest du in einem Code-Friedhof).Ich bevorzuge es, Modernizr zu verwenden, um das Fehlen der Unterstützung zu erkennen, anstatt die Unterstützung.
„Der einzige Nachteil, den ich sehen kann, ist, dass er sich speziell auf Absatz-Elemente bezieht. In einer realen Umgebung kann man sich nicht darauf verlassen, daher schreibt man entweder einen Selektor, der alle möglichen zu verschiebenden Elemente abdeckt, oder man verwendet einen nicht-semantischen Wrapper.“
Ein nicht-semantischer Wrapper ist meiner Meinung nach keine schlechte Idee. Funktioniert super http://jsfiddle.net/sTcTF/5/
Benutze einfach den :not(.foo) Pseudo-Selektor und IE wird alle Tags ignorieren, die du dort einfügst, also gruppiere die absolute Positionierung und die Transformationen in dieser Definition.
Der Header-Text wird in Firefox nach dem Drehen sehr pixelig, und ihn vertikal zu machen, erschwert das Lesen, aber ich sehe ein paar seltene Fälle, in denen es cool zu verwenden wäre.
Sieht toll aus, wird auf meiner Portfolio-Website Stirling sein :)
Danke
Über Cross-Browser-CSS-Transforms (ja, auch in IE) gibt es einen Artikel im Blog von User Agent Man.
Es ist ein cooler und vollständiger Beitrag dazu, der zeigt, wie man die verdammten Berechnungen für Transforms durchführt.
Hier ist der Link
http://www.useragentman.com/blog/2010/03/09/cross-browser-css-transforms-even-in-ie/
Außerdem gibt es, wenn ich mich nicht irre, eine spezielle Filter-Eigenschaft, um Objekte zu drehen.
Ich liebe diesen CSS-Trick
aber nicht funktionierend im dummen Browser Explore ^^
Danke vielmals Chris ^^
Hey, ich habe genau das auf http://clarite.co.uk (eine einfache Gesundheits- und Schönheitssalon-Website, nichts Besonderes) gemacht, mit IE8-spezifischem CSS (danke, Modernizr) und alles war in Ordnung, bis ich auf IE9 aktualisierte, jetzt hat IE9 seine Kniekehlen verbogen (das behebe ich heute), aber der IE8-Modus sieht gut aus, aber bei meinem Kunden IE8 sieht es so aus wie bei meinem IE9 ... wie auch immer, ich habe nur .ie-Klassen verwendet und sie in Listen gesetzt... alles relativ positioniert.
Funktioniert super in Chrome etc. aber IE-Debugging werde ich heute machen :o(
Für IE habe ich verwendet
Das Ganze mit der Hintergrundfarbe behebt die schlechte Font-Renderung von IE8, sobald du sie transformierst, und ich erinnere mich nicht mehr, wofür der Zoom ist, aber dafür gibt es auch einen Grund.
Wie auch immer, Debugging zu tun!
Das ist wirklich cool. Ich werde das bald ausprobieren. Danke
Definitiv einfacher mit Modernizr!
Ich glaube nicht, dass vertikale Überschriften ideal sind. Ich denke, das macht die Lesbarkeit schwieriger, und ich muss sagen, dass Überschriften der wichtigste Teil von Artikeln sind.
Ja, es ist wirklich schick, aber nichts für die Benutzerfreundlichkeit.
Interessanter Hinweis von Leser Ethan Herbertson, der schrieb, dass der Text auf Buchrücken in Russland den Text andersherum "dreht".
Eine weitere Alternative ist einfach, einen Abstand für die Oberseite sowie die linke Seite des Inhalts festzulegen.