2012-07-12 5 views
5

Ich arbeite für ein kreatives Designstudio, das gerne Paradigmen und Konventionen bricht, um einzigartige Website-Layouts zu erstellen, und seit kurzem entwickeln wir horizontale Website-Layouts. Während horizontale Website-Layouts "cool" aussehen, muss ich noch herausfinden, wie man sie flüssig und reaktionsschnell wie mit einer vertikalen Grid-basierten Website machen kann.Erstellen eines reaktiven horizontalen Layouts mit CSS?

Normalerweise haben Sie für eine vertikale Website mit einem Container eine prozentuale Breite auf Ihrem Containerelement und legen dann eine maximale Breite fest. Mit einem responsiven Layout scrollt Ihr Inhalt unendlich von der Seite ab, er kann in der Breite variieren, besonders wenn der Inhalt einzigartig ist und daher die Formel target/context * 100 nicht wirklich funktioniert (oder?).

Gibt es vielleicht eine Möglichkeit, die Höhe, die Polsterung und die Ränder der Elemente anzupassen, damit es genauso funktioniert wie eine netzbasierte Website. Es macht mir nichts aus, Javascript zu verwenden, aber ein CSS-Fix wäre ideal.

Für Ihre Referenz ein Beispiel für die Art von Layout versuche ich zu erstellen:

enter image description here

+0

Das einzige Problem ist, dass die aktuelle Seite, die ich zum Beispiel am Bau hat einen Inhaltsblock, der eine veränderliche Breite aufweist, da es eine horizontale Mauerwerk-Plugin ist mit so der Behälter erweitert und Änderungen in der Breite abhängig wie der Inhalt gemischt wird und wie groß der Inhalt ist. Ich kenne die Höhe auch nicht, weil es sich nur um eine prozentuale Höhe handelt, also gibt es nicht wirklich einen Zusammenhang. Ich schätze, das ist nicht so einfach, wie es unseren Designern scheint;) –

+0

Ja, das ist ein neuer Bereich für viele von uns, aber einen sehe ich mehr - horizontale Layouts ganz oder Abschnitte, die einen weiten horizontalen Inhalt haben Diese wird basierend auf der Benutzeraktion oder dem Fortschritt in die Ansicht gerollt. – artlung

+0

Ich würde CSS flexible Box-Modell verwenden, wenn ich diese Art von Layout heute machen würde. Flex ist eine unglaublich leistungsfähige Layout-Methode, die von allen modernen Browsern unterstützt wird. Ich verwendete flexbox im Jahr 2012 für ein kompliziertes Layout ohne auf JavaScript zurückgreifen zu müssen, da unser damaliger Programmierer das Layout durcheinander brachte. Dies war ein bisschen ein Glücksspiel damals, als der Standard noch im Fluss war, aber seit dem letzten Aufruf.Auch wenn vorherige Spezifikationen oder Browser ohne Unterstützung verwendet werden, gibt es einige großartige Polyfills. – Thurstan

Antwort

4

Sie können dies mit jQuery tun, um die Seite div-Container des Kindes Elemente Berechnung .outerWidth und sie alle zusammen das Hinzufügen und Anhängen, dass auf der Seite oder .css('width') des div

HTML-Struktur:

<div id="main"> 
    <div><img src="#" /></div> 
    <div><img src="#" /></div> 
    <div><img src="#" /></div> 
</div> 

EDIT: I Ich habe vergessen, das CSS hinzuzufügen, aber der Hauptpunkt hier ist, dass Sie wollen, dass die Child-Divs von #main nach links schweben.

Javascript:

function() { 
     var window_width = jQuery(window).width(), 
      container = jQuery('#main'), 
      page_width = 0; 

     // Grab every child element of the "main" container 
     container.children().each(function(index){ 
      var incl_margin = true, 
       $this = jQuery(this); 

      // Check if each child element has a margin-left or margin-right 
      if (parseInt($this.css('margin-left')) < 0 || parseInt($this.css('margin-right')) < 0) { 
       var incl_margin = false; 
      } 

      // Get element's width including margins (if they exist from above) 
      var width = $this.outerWidth(incl_margin); 
      page_width += width; 

     }); 

     // Add total width of containers elements as the containers width 
     if(page_width > 0) 
      container.css({'width' : page_width + 'px'}); 
    } 
} 
+0

Dies ist, was ich derzeit mache, gut so etwas. Es fühlt sich hackisch an, wenn man bedenkt, dass horizontale Layouts immer mehr an Zugkraft gewinnen, würde man meinen, dass es einen schöneren Weg geben würde, ein ansprechendes horizontales Layout zu erstellen. Danke für die Antwort, das ist großartig. –

1

Es gibt viele Möglichkeiten, dies zu tun.

Wenn Sie die genaue Breite der Seite wissen, können Sie einfach einen Wrapper div machen, setzen die volle Breite und dann schweben Ihre Inhalte divs nebeneinander im Inneren der Umhüllung etwa so:

<div style="width: 2500px; border: red solid 1px;"> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
</div> 

Wenn Sie kenne die genaue Breite, das ist die einfachste Lösung.

Wenn die Breite unbekannt ist oder variiert, können Sie JavaScript verwenden, um die volle Breite zu berechnen und sie mit den gleichen Ergebnissen auf den Wrapper anzuwenden. Dies sollte für die meisten Bedürfnisse funktionieren.

+1

Die Frage ist, wie kann ich ein horizontales Layout reagieren ohne Kenntnis von Breiten oder Höhen? Herkömmliche Responsive-Websites basieren auf Grid-basierten Containern, bei denen die horizontale Breite und Höhe je nach Browser unterschiedlich sind. Ich nehme an, es sei denn, ich verwende schwere JS, die eine Vielzahl von Seiten-Repaints verursachen, dann ist dies nicht wirklich möglich außer dem, was wir bereits tun können. –