2012-07-12 15 views
5

Pracuję dla kreatywnego studia projektowego, który lubi łamać paradygmaty i konwencje, tworząc unikalne układy stron, a ostatnio zaczęliśmy opracowywać poziome układy stron. Podczas gdy poziome układy stron wyglądają "fajnie", muszę jeszcze opracować, jak sprawić, by były płynne i responsywne, jak to tylko możliwe dzięki pionowej, opartej na siatce stronie internetowej, zaraz po wyjęciu z pudełka.Jak utworzyć responsywny układ poziomy za pomocą CSS?

Normalnie na stronie pionowej z pojemnikiem chcesz mieć szerokość procentową opartą na elemencie pojemnika, a następnie ustawić max-width. Dzięki responsywnemu układowi treść nieskończenie przewija się poza stronę, może być różna w szerokości, szczególnie jeśli treść jest unikalna, a zatem cel/kontekst * 100 nie działa tak naprawdę (czy tak?).

Czy istnieje sposób może mieć reagujących Heights, dopełnienia i marginesów na temat elementów, które sprawiają, że działa tak jak ty to siatka oparta czułe internetowej. Nie mam nic przeciwko używaniu JavaScript, ale poprawka CSS byłaby idealna.

celach informacyjnych przykładem rodzaju układ Próbuję utworzyć:

enter image description here

+0

Jedynym problemem jest to, że obecna strona buduję na przykład ma blok zawartości, która ma zmienną szerokość, ponieważ używa poziomą wtyczki murowane więc pojemnik rozszerza się i zmiany w szerokości zależnie o tym, jak tasuje się treść i jaka jest jej wielkość. Nie znam też wysokości, ponieważ jest to wysokość oparta na procentach, więc tak naprawdę nie ma kontekstu. Zgaduję, że nie jest to tak łatwe, jak się wydaje naszym projektantom;) –

+0

Tak, jest to nowy obszar dla wielu z nas, ale widzę więcej - poziome układy w całości lub sekcje, które mają szeroką zawartość poziomą który przewija się do widoku w oparciu o akcję użytkownika lub postęp. – artlung

+0

Chciałbym użyć elastycznego modelu pudełkowego CSS, jeśli miałbym dzisiaj zrobić taki układ. Flex jest niewiarygodnie mocną metodą układową obsługiwaną przez wszystkie nowoczesne przeglądarki. Użyłem flexbox w 2012 roku dla skomplikowanego układu bez uciekania się do javascript, ponieważ nasz ówczesny programista robił bałagan z układu. W tamtych czasach było to trochę ryzykowne, ponieważ standard wciąż się zmieniał, ale od ostatniego połączenia.Nawet jeśli korzystasz z poprzedniej specyfikacji lub przeglądarek bez wsparcia, możesz skorzystać z doskonałej polyfill. – Thurstan

Odpowiedz

4

Można to zrobić z jQuery obliczając elementy podrzędne strona pojemnika div za .outerWidth i dodając je wszystkie razem i dołączanie że na stronie lub struktury .css('width')

HTML div:

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

EDIT: zapomniałem dodać css, ale głównym punktem jest to, że chciałbyś, aby divy dziecka z #main były pływające w lewo.

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

To właśnie obecnie robię, coś w tym stylu. Wydaje się być hackowskim, biorąc pod uwagę, że poziomy układów zaczynają nabierać więcej trakcji, niż można by sądzić, że byłby przyjemniejszy sposób na uzyskanie responsywnego poziomego układu. Dzięki za odpowiedź, to jest świetne. –

1

Istnieje wiele sposobów, aby to zrobić.

Jeśli znasz dokładną szerokość strony można po prostu zrobić div otoki ustaw pełnej szerokości, a następnie unoszą swoją stronę div content siebie wewnątrz owijki tak:

<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> 

Jeśli znać dokładną szerokość, jest to najprostsze rozwiązanie.

Jeśli szerokość jest nieznany lub różny, można użyć JavaScript do obliczenia pełnej szerokości i zastosować go do owijki z tych samych wyników. To powinno działać dla większości potrzeb.

+1

Pytanie brzmi: jak wykonać układ poziomy w odpowiedzi, nie znając szerokości ani wysokości? Konwencjonalne strony responsywne są oparte na siatce z kontenerami, w których poziomy nie mają szerokości i wysokości zależą od przeglądarki. Zgaduję, chyba że użyję ciężkiego JS, który spowoduje mnogość odbitek stron, wtedy nie jest to możliwe inaczej niż to, co możemy już zrobić. –

Powiązane problemy