Wenn Webseiten aus Holz wären, würde die Maserung auf und ab laufen. Vertikal ist der natürliche Fluss des Web-Layouts. Wenn Seitenelemente den rechten Rand des Browserfensters erreichen und darüber hinausgehen, wird der Fluss standardmäßig auf „Umbrechen“ dieses Elements auf die nächste Zeile gesetzt. Je mehr Inhalt auf der Seite, desto höher wird sie, nicht breiter. Warum ist das so? Weil es einfach Sinn macht. Unsere Augen sind es gewohnt, ziemlich kurze Textzeilen zu lesen, daher wäre es schmerzhaft zu lesen, wenn wir einen Textabsatz in einer langen geraden Zeile sehen würden. Absätze benötigen Zeilenumbrüche, um lesbar zu sein (daher der Begriff „Textblöcke“). Wir wollen sicherlich keine Zeilenumbrüche selbst in den Markup-Code einfügen. Offensichtlich müssen wir das nicht, der Browser macht dieses Umbrechen für uns. Daher die vertikale Expansion.

Dieser natürliche Fluss hat zu Konventionen im Webseitenlayout und sogar in der Hardware selbst geführt. Beachten Sie, wie viele Computermäuse ein spezielles Scrollrad ausschließlich zum vertikalen Scrollen haben. Aber Webseiten sind mit sowohl vertikalen als auch horizontalen Scrollbalken ausgestattet, richtig? Wenn wir mit unserem Webseitenlayout verantwortungsvoll umgehen, können wir „gegen den Strich“ gehen und Webseiten erstellen, die hauptsächlich horizontal scrollen und sich sogar horizontal erweitern, wenn wir mehr Inhalt hinzufügen. Vielleicht ein leichter Nachteil für die „Benutzerfreundlichkeit“, aber es kann sicherlich ein cooles kreatives Detail sein!
Der beste Weg, es zu tun
Ich wage zu behaupten, dass eine Tabelle die beste Layout-Technik für eine horizontal scrollende Website ist.
Update: Dies ist ein ziemlich alter Artikel. Der Kernpunkt war, dass man mit einer Tabelle Elemente in einer Zeile anordnen kann, die sich endlos fortsetzt, ohne dass sie umbrochen werden. Dies könnte man heute mit display: flex; auf einem übergeordneten Element viel einfacher erreichen, obwohl die Benutzererfahrung hier ziemlich fragwürdig ist.
Bevor ich erkläre, warum, schauen wir uns ein paar andere mögliche Techniken an
- Festlegen einer sehr breiten statischen Breite. Vielleicht ist der „schnellste und schmutzigste“ Weg, um ein horizontales Layout zu starten, einfach eine sehr breite statische Breite für das `body`-Element selbst festzulegen. Sagen wir 10000px. Probieren Sie es ruhig aus, Sie erhalten sicher einen horizontalen Scrollbalken. Während dies funktioniert, ist es etwas unflexibel. Webseiten sind dynamische Orte, und wir sollten auf Erweiterbarkeit vorbereitet sein, anstatt uns durch statische Breiten einzuschränken. Denken Sie an normale vertikal scrollende Seiten. Sie legen doch keine statischen Höhen für Ihre Seiten fest, oder?
- Floats + Whitespace. Ich habe einige Zeit mit der
float-Eigenschaft und derwhite-space-Eigenschaft experimentiert, um zu sehen, ob ich einen Weg finden kann, das automatische Umbrechen des Browsers zu umgehen, aber ich hatte keinen großen Erfolg. Seitenelemente, die gefloatet sind, aber keine Breite haben, dehnen sich entsprechend der Breite ihres Inhalts aus. Ich dachte, vielleicht würde sich dies über die Breite des Browserfensters hinaus erweitern, wenn ich viele gefloatete Elemente darin platziere. Kein Erfolg. Es gibt auch die Eigenschaftwhite-space: nowrap;in CSS, die ich ausnutzen wollte, um das automatische Umbrechen zu verhindern, aber sie funktioniert nur für Textelemente, nicht für Blöcke oder alles andere, was als Inline gesetzt ist. Nun ja. - Verwendung von JavaScript zum Festlegen einer Breite. JavaScript hat eindeutig die Fähigkeit, Seitenelemente zu manipulieren und Berechnungen on-the-fly durchzuführen. Wir könnten dies nutzen, um eine Umgebung zu schaffen, die sich extensibel verhält. Es gilt jedoch als schlechter Stil, das Seitenlayout mit JavaScript zu handhaben. Ich stimme dem im Allgemeinen zu, aber ich glaube, Sie können JavaScript auf diese Weise verwenden, solange Sie dies unauffällig tun und darauf achten, dass die Seite auch bei deaktiviertem JavaScript ein nutzbares Layout bietet.
Die <table>-Methode
Was wir brauchen, ist ein Seitenelement, das sich bei Bedarf horizontal ausdehnen kann und niemals „umbricht“. Eine Zeile von Tabellenzellen passt hier perfekt. Tabellenzellen dehnen sich von Natur aus aus, um den darin enthaltenen Inhalt aufzunehmen, und sie werden niemals umgebrochen, bis eine neue Zeile beginnt. Perfekt.
Nehmen wir an, wir möchten eine Reihe von Blogbeiträgen nebeneinander horizontal anordnen. Wir müssten eine Seitenstruktur wie diese verwenden
<table>
<tr>
<td>
.. blog post #1
</td>
<td>
.. blog post #2
</td>
<td>
.. blog post #3
</td>
</tr>
</table>
Igitt, richtig? Es fühlt sich nie gut an, Markup wie dieses zu verwenden, nicht nur, weil es eine Tabelle ist, sondern auch wegen der mangelnden Semantik. Wir verwenden hier eine Reihe von Tags, die ausschließlich der Darstellung dienen und nichts mit dem Inhalt zu tun haben.
Idealerweise wäre unsere Seitenstruktur wie folgt
<article class="post">
.. blog post #1 ..
</article>
<article class="post">
.. blog post #2 ..
</article>
<article class="post">
.. blog post #3 ..
</article>
Mit jQuery können wir ganz einfach das Beste aus beiden Welten haben!
Schreiben Sie das gewünschte Markup, erhalten Sie das benötigte Markup
Wir werden jQuery verwenden, um uns zu ermöglichen, das gewünschte Markup (die Div-Struktur) zu erhalten und es so zu manipulieren, dass wir das für horizontales Scrollen benötigte Markup (die Tabellenstruktur) erhalten. Sie solltenalarmsignale in Ihrem Kopf hören, wenn Sie JavaScript für das Layout verwenden, aber ruhen Sie sich aus, wir werden sicherstellen, dass das Layout auch ohne aktiviertes JavaScript perfekt nutzbar ist. Als zusätzlichen Bonus ist das Layout auch mit oder ohne aktiviertes CSS sowie mit jeder Kombination nutzbar.
Lassen Sie uns zuerst durchdenken, was wir möchten
- Umschließen Sie ALLE Beiträge in einem einzigen Tabellen-Tag und einem einzigen Zeilen-Tag
- Umschließen Sie JEDEN Beitrag in einem Tabellenzellen-Tag
Fügen wir nun jQuery in den Kopfbereich unserer Seite ein und schreiben Sie das benötigte jQuery, um dies zu erreichen.
<script src="js/jquery.js"></script>
<script>
$(function() {
$("#page-wrap").wrapInner("<table cellspacing='30'><tr>");
$(".post").wrap("<td>");
});
</script>
Das sollte es erledigt haben! Beachten Sie, wie die Zellabstände als Inline-Attribut zum Tabellenelement hinzugefügt werden. Wir könnten normalerweise mit CSS Abstände zu Zellen anwenden, aber wir möchten sicherstellen, dass jeder Blogbeitrag auch ohne CSS gut lesbar ist. Ohne dies würden die Blöcke direkt nebeneinander liegen, was sie schwer lesbar macht.
Die gesamte CSS-Datei für dieses Beispiel ist sehr sehr einfach
* {
margin: 0;
padding: 0;
}
body {
font-size: 62.5%;
font-family: 'Lucida Grande', Helvetica, sans-serif;
background: #121212;
color: #999;
padding: 20px;
}
tr {
vertical-align: top;
}
.post {
width: 500px;
}
p {
font-size: 1.2em;
margin: 0 0 15px 0;
}
h1 {
font-family: Sans-serif;
font-size: 4.0em;
letter-spacing: -1px;
color: #ccc;
}
h2 {
font-family: Sans-Serif;
font-size: 3.0em;
letter-spacing: -1px;
color: #ccc;
}
Nur ein paar bemerkenswerte Dinge. Die statische Breite des `.post`-Divs steuert die Breite jedes Blocks. Die `vertical-align`-Eigenschaft der Tabellenzeile hält jeden der Blöcke am oberen Rand seiner Tabellenzellen ausgerichtet. Dies ist standardmäßig auf Mitte gesetzt, daher ist dies notwendig.
Die Ergebnisse
Mit aktiviertem CSS und JavaScript (99% der Benutzer) haben wir eine gut umgesetzte horizontal scrollende Website. Ohne CSS und JavaScript (Bildschirmlesegeräte) regiert die Struktur der einzelnen Blogbeiträge die Seite, vorausgesetzt, sie sind semantisch markiert, die Seite wird großartig aussehen. Die einzige Besonderheit hier ist, wenn JavaScript aktiviert ist und CSS deaktiviert ist (SELTEN), sieht die Seite ein wenig bizarr aus.
Siehe den Stift
Beiträge in einer horizontalen Reihe durch Tabellen-Wrapping von Chris Coyier (@chriscoyier)
auf CodePen.
Andere Techniken für horizontales Scrollen
Das buchstäbliche Erweitern der Breite Ihrer Seite und die Verwendung von Scrollbalken zur Navigation ist nur eine Möglichkeit, den horizontalen Scroll-Effekt zu erzielen. JavaScript-Slider sind ein weiterer Weg, den Sie einschlagen können, der den Effekt simuliert. Flash wäre eine weitere Möglichkeit. Wenn es um Webdesign geht, gibt es immer viele Wege!
Ich finde Websites, die das tun, sehr „trendy“, aber diese Art von Webdesign ist wahrscheinlich nicht am praktischsten für geschäftliche Zwecke. Ich bin nicht abgeschreckt von Seiten, die dies nutzen, aber ich bin mir sicher, dass die meisten Leute es als unnatürlich empfinden würden.
Das gesagt, toller Beitrag!
Dieses jQuery funktioniert in Chrome, aber nicht in Firefox oder IE... bitte helfen Sie
Hallo Chris, die Evanescence-Website ist die einzige, die mit dem Mausrad horizontal scrollt, warum ist das so?
Ich denke, horizontale Seiten sind weniger beliebt, weil man mehr Fläche aus dem Scrollen in der kleineren Bildschirmabmessung und bei Monitoren ist das die Höhe. Außerdem scrollt Ihr Beispiel nach unten, wenn Sie das Scrollrad der Maus verwenden. Ich würde meine Seite zu einer horizontalen Seite machen, wenn ich weniger Inhalt hätte... wie eine Portfolio-Seite.
@roger: Sieht aus, als würde die Evanescence-Website ein wenig JavaScript verwenden, um das zu erledigen
http://www.evanescenceuk.co.uk/js/thw.js
Ziemlich raffiniert.
Diesmal nicht, Chris.
Möglicherweise, wenn ich (wir) mich/uns daran gewöhnen könnten…
Traditionell und im Allgemeinen sind die meisten von uns es gewohnt, LTR oder RTL zu lesen. Sich in Blöcken von 500 Pixeln nach rechts zu bewegen, ist ablenkend und unterbricht den Rhythmus. Die meisten von uns können ihr Mausrad beim Lesen instinktiv nach unten bewegen.
Das „Nullen“ auf einer neuen Seite funktioniert einfach nicht.
Interessantes Konzept, aber es gibt gute Gründe, warum wir versuchen, breitere als Bildschirm-Entwicklung zu vermeiden.
Dave
@chris ja, ich habe es gerade zu Ihrem Beispiel hinzugefügt und es scrollt jetzt mit dem Rad!
Ich denke, die breite Öffentlichkeit würde es schwer finden, sich anzupassen, aber für Designer-Showcases/Portfolios oder Angeber ist es einfach etwas anderes und eröffnet mehr Designmöglichkeiten.
Nicht jedermanns Sache, aber anders…
Meine Website war vor einiger Zeit so, aber ich hatte Ankerlinks, die zu Teilen der Seite führten. Ich denke, es funktioniert für Designer-Websites – oder andere Websites, von denen die Leute erwarten, dass sie „anders“ sind, aber nicht für die allgemeine Internet-Öffentlichkeit.
Guter Beitrag!
Floats stapeln sich standardmäßig nebeneinander.
Der Grund, warum Sie sie in diesem Beispiel nicht stapeln können, ist das body-Element. Es hat `overflow: auto`, was bedeutet, dass alles, was herausragt, sichtbar getrimmt wird und der Scrollbalken erscheint. Floats können sich jedoch nicht über den Rahmen von Boxen hinaus so verhalten. Sie könnten versuchen, `overflow` zu deaktivieren (`visible`), aber dann haben Sie einen weiteren Nebeneffekt: die Breite des Browserfensters.
Ich empfehle keine Tabellen. Sie sollten mit `display: table-cell` und `expression()` für IE experimentieren, wenn Sie solche ausgefallenen Effekte wünschen.
Das ist schön für Designer, aber haben Sie schon einmal versucht, etwas auszudrucken :0)
Bitte...
Hören Sie auf, JavaScript-Frameworks für solche Korrekturen zu missbrauchen. Ich verstehe nicht einmal, warum Sie überhaupt JavaScript dafür brauchen..
Vielleicht ein leichter Schlag gegen die „Benutzerfreundlichkeit“,
Meinen Sie einen GROSSEN Schlag. Die meisten Mäuse haben kein horizontales Scrollrad o.o
funktioniert bei mir überhaupt nicht in IE7,
Al
Interessant, dass IE 7 nicht funktioniert. IE 8 Beta funktioniert einwandfrei. Ich frage mich, ob es einige Eigenheiten gibt, wie IE 7 das jQuery-Zeug formatiert, die ich nicht kenne. Ich weiß, dass es kein gültiger Code ist (man könnte ihn abstrahieren, um das zu beheben), aber ich sehe nicht wirklich, was sonst falsch daran ist.
funktioniert in FF2 und FF3
in IE7 werden die Absätze einfach vertikal angezeigt
hat das noch jemand erlebt?
Al
die Beispieldateien heruntergeladen und es verhält sich in IE7 genauso,
in FF scheinen die Absätze vertikal zentriert zu sein, ich weiß nicht, ob das
die Absicht war
Al
http://www.hotel-oxford.ro/
Ich bin auf ziemlich viele Mootools-Websites gestoßen, die diese Technik verwenden.
Was mir an der Hotel-Website besonders gefällt, ist, dass sie auch ohne JavaScript eine funktionale Website ist!
Horizontales Scrollen wird auf Webseiten nicht oft verwendet, aus demselben Grund, warum Text in Publikationen nicht über eine Doppelseite reicht: Die langen Scrollbewegungen über eine Seite ermüden die Augen der Leser viel schneller. Natürlich können Sie Interesse wecken, indem Sie Konventionen brechen, aber das sollte nur getan werden, wenn der Kontext Ihres Designs dies zulässt. Benutzerfreundlichkeit muss nicht uninspirierend sein; sie kann zu großartigen Designs führen, die nicht nur praktisch, sondern auch hochgradig kreativ sind.
Es gab keinen Grund, warum das horizontale Layout bei deaktiviertem JavaScript überhaupt nicht funktionieren sollte, oder?
@anonymous – der Punkt ist, dass die Seite bei deaktiviertem JS NUTZBAR ist. Wenn Sie die Seite besuchen, können Sie es selbst sehen. Es geht darum, dem Benutzer eine unterhaltsame Erfahrung zu bieten, um seine Aufmerksamkeit zu fesseln und es zu einer „spaßigeren“ Erfahrung zu machen.
http://www.tiffanymumford.com/fashion
Ich habe whitespace:nowrap verwendet, eine Container-Höhe angegeben und die Bildklasse auf display:inline gesetzt.
Das hat für mich funktioniert.
Ah, das sieht gut aus! Ich finde es großartig, horizontal zu scrollen, um Bilder auf diese Weise anzuzeigen. Aus irgendeinem Grund fühle ich mich wohler, Text zu lesen und hoch und runter zu scrollen.
Diese Liste von Beispielen enthält wirklich coole Websites. Lässt mich das ausprobieren wollen.
Ich habe dieses andere, sehr schöne Beispiel einer horizontal scrollenden Website gefunden: http://deanoakley.com/
Es ist in Divs aufgebaut, die die „dreckige“ Technik der oben genannten festen Breite verwenden. Sie können das Rad nicht zum Scrollen verwenden, wenn Sie JavaScript deaktivieren, aber das Verschieben des Balkens selbst funktioniert.
Ich mag diese Art von Design im Allgemeinen, wenn es auf originellen, inhaltlich leichten Seiten wie Portfolios verwendet wird, aber ich sehe es nicht auf Unternehmens- oder E-Commerce-Websites, aus dem von Leroy erklärten Grund.
NICHT
Horizontal scrollende Websites gehören zu den 7 Todsünden des Webdesigns, zusammen mit animierten GIFs, geschäftigen Hintergründen und dem Erzwingen der Größenänderung des Browserfensters.
SCHLECHT SCHLECHT SCHLECHT
Wie konnten Sie http://www.csszengarden.com/?cssfile=037/037.css verpassen
:O :O
Haben Sie das Buch CSS Zen Garden nicht gelesen?
Und die Leute, die sich beschweren, sehen Sie sich den Link an, den ich gerade gegeben habe, er ist meiner Meinung nach äußerst benutzerfreundlich. Außerdem benutze ich die mittlere Maustaste zum Scrollen, also finde ich das nicht störend.
Für Websites, deren Hauptzweck die Informationsverbreitung und NICHT Webanwendungen ist, kann ich mir das sehr nützlich vorstellen, insbesondere wegen des WOW-Faktors, den es bietet. Ich bin desillusioniert von den dummen abgerundeten Ecken und hellen Farben auf allen Websites, die auf den 2.0-Zug aufspringen wollen.
Hallo.. wegen der Evanescence-Website.. und anderen.. sie verwenden das Skript thw.js
Mehr Informationen finden Sie hier: http://www.thehorizontalway.com/
Beste Grüße
Ich erkenne an, dass es nicht streng genommen zur Art von „Seitenscroll“-Website gehört, die Sie diskutieren, aber die Website von Jonathan Yuen ist die beste persönliche Website, die ich je gesehen habe. Sie bricht definitiv mit Konventionen. Ich denke, es ist unmöglich, sie zu navigieren (zu erkunden?), ohne echte Freude zu empfinden.
http://www.jonathanyuen.com/main.html
@Jason: Wow, das ist eine wahre Freude zu erkunden, danke für den Link!
Hallo Chris,
Ich muss Sie korrigieren, aber Bildschirmlesegeräte schalten CSS oder JavaScript nicht standardmäßig aus.
Aus historischen Gründen haben sie auch wenig bis keine Schwierigkeiten, Tabellenstrukturen zu durchqueren, solange sie linearisiert Sinn ergeben.
Für ein Bildschirmlesegerät sind horizontales oder vertikales Scrollen konzeptionell irrelevant. Es ist nur ein Strom linearer Daten mit Sprungpunkten (Überschriften, Tabellen, Tr, Td usw.).
Ich habe versucht, WordPress in ein horizontales Layout zu integrieren, aber mein Hauptproblem war, nach jedem Beitrag auf der Startseite einen „Nächster Beitrag“-Link zu haben, der dann zum nächsten Beitrag auf derselben Startseite führt.
Sie können das einfach von einer einzelnen Beitragsseite zur nächsten Beitragsseite tun, aber nicht von Beitrag zu Beitrag, während Sie auf der Startseite bleiben. Das Einfügen von Ankerlinks in die index.php-Vorlage macht alles durcheinander.
Ich halte immer noch nach einer Lösung Ausschau, weil ich glaube, dass horizontale Websites großartig aussehen und funktionieren können.
Es ist auch möglich, ein externes Stylesheet dynamisch zu ändern. Schauen Sie sich http://www.itskevandeursen.nl an, wo ich eine PageManager-Klasse (in PHP) habe, von der aus ich die Anzahl der Seiten abrufen kann, die auf meiner Website angezeigt werden. Ich gebe die Anzahl der Seiten in einem JavaScript-Block im Header meiner Seite aus. Dieses JavaScript erstellt einen Aufruf an eine CSS-Datei, die eigentlich eine PHP-Datei mit einem Text/CSS-Header ist. Die Breite des `body`-Elements wird basierend auf der Anzahl der Seiten und der Breite des Benutzerbildschirms festgelegt. Es ist nicht ganz perfekt, aber es funktioniert. Ein großer Nachteil ist, dass bei deaktiviertem JavaScript die CSS-Datei nicht geladen wird :(.
Ich habe auch eines der jQuery-Plugins (serialScroll) verwendet, um von Seite zu Seite zu gleiten, da das Springen zu einer Element-ID nicht in allen Browsern wie erwartet funktioniert.
NEIN NEIN NEIN NEIN NEIN NEIN NEIN – das ist ein furchtbarer Ansatz und ich hoffe, Leute kopieren ihn nicht und denken nicht einmal daran, ihn zu benutzen.
Das Einfügen von Tabellen mit JS ist genauso schlimm wie das Einfügen von Anfang an, am Ende des Tages wird die Seite eine verdammte Tabelle enthalten.
Enttäuscht :<
Danke dafür :)
Ich denke, das wäre schwierig für das Lesen von Text, aber für eine Fotogalerie könnte es auf lustige Weise verwendet werden. Ein Freund von mir hat mir diese Website geschickt, es ist ihre Freundin, die Fotografin ist, und ich arbeite an einer Fotografie-Website und dachte, das wäre gut zu verwenden.
http://www.francodeleo.com/
Funktioniert nicht in IE6. Es zieht die divs nacheinander nach unten.
Gibt es eine Lösung?
Hat jemand eine Lösung für IE6 und IE7?
Bitte….
IE-Lösung!
Das HTML von diesem JS kommt umständlich, mit einem zusätzlichen DIV-Tag zwischen dem TR zum TD-Set.
Ich habe den Code zu etwas wie diesem geändert, und alles funktioniert gut für beide Browser
$(function(){
$("#page-wrap").wrapInner(document.createElement("tr"));
$("#page-wrap").wrapInner(document.createElement("table"));
$(".post").wrap("<td>");
});
Es ist wichtig, das Element tatsächlich zu erstellen, bevor es mit Inhalt umschlossen wird. Eine weitere IE-Eigenart endet hier….
Ich habe auch das IE6-Problem.
http://www.hotel-oxford.ro/ –
Ich habe mir diese Seite angesehen, und es gibt keinen unteren Scrollbalken. Weiß jemand, wie sie eine horizontale Website ohne Scrollbalken erstellt haben?
Ja, Leute, habt ihr schon von diesem einfachen kleinen Trick gehört?
… um „horizontal“ zu scrollen,
drücken Sie die „SHIFT“-Taste und scrollen Sie, wie Sie es normalerweise tun würden…..
ah….es ist erstaunlich.
Ich kann auf meiner „Maus“ normal scrollen, während ich die Shift-Taste gedrückt halte, und voilà.
Hallo Chris, es ist ein interessantes Bestreben, eine natürliche Website zu erstellen, die horizontal scrollt, und Sie haben einen guten Artikel dazu geschrieben.
Mir scheint jedoch, dass der natürlichste und korrekteste Weg, etwas wie dieses zu erreichen, ohne Tabellen zu verwenden, darin besteht, nicht die Breite des Bodys festzulegen, sondern nur die Höhe auf 100 % oder weniger zu begrenzen.
Dann, indem man dem „paragraph“-Tag eine Breite von z.B. 45em gibt und sicherstellt, dass er links floatet und als Block angezeigt wird, bin ich sicher, dass alles ziemlich gut horizontal ausgerichtet wird. Das Einzige, worauf Sie achten müssten, ist, keine Absätze zu erstellen, die länger als z.B. 20 Textzeilen sind. Aber wann erstellt man schon so große Absätze?
Warum haben Sie nicht so etwas ausprobiert? Oder verstehe ich falsch, was Sie erreichen wollen?
Mit freundlichen Grüßen,
David Bartenstein
Anstatt JavaScript zu verwenden, um tabellarisches Verhalten zu erzeugen, können wir nicht einfach die CSS-Befehle verwenden?
oder
stattdessen?
Wie wäre es mit relativer Breite?
Körper {
width: 500%;
}
sektion {
width: 20%;
}
Funktioniert ziemlich gut für 5 Sektionen. Zumindest in Chrome.