2012-10-12 12 views
11

Sto creando un sito Web reattivo e, per una buona esperienza utente, ho bisogno di alcune modifiche al layout da mobile a desktop. Nello specifico, ho bisogno di cambiare l'ordine di alcuni elementi HTML.Commutazione dell'ordine di elementi HTML quando il layout cambia in Responsive Web Design

Ho bisogno che gli elementi HTML siano in un ordine diverso per desktop vs mobile.

mobile

<div class="one">One</div> 
<div class="two">Two</div> 
<div class="three">Three</div> 

Ordinare acceso per Desktop

<div class="one">One</div> 
<div class="three">Three</div> 
<div class="two">Two</div> 

Questo è semplificata versione di quello che voglio realizzare. Penso che si chiami progressive enhancement. In che modo gli esperti di web design spostano elementi html? Con JavaScript? Sarebbe normale? Ci sono plugin jQuery?

risposta

11

Basta utilizzare jQuery per modificare il DOM intorno come richiesto

if (mobile == true) { 

    $('div.three').insertBefore($('div.two')); 
} 
+0

Grazie. Non ero sicuro se fosse una buona pratica. Nel mio caso particolare, se dovessi manipolare il DOM, il profilo HTML5 sarebbe stato interessato dal modo in cui non volevo. Sembra che io debba scegliere tra una buona esperienza visiva per l'utente che soddisfi le esigenze del business e di una struttura HTML5 ben strutturata. –

+0

non dovrebbe leggere l'esempio '$ ('div.3') ...' invece di 'three'? – BandonRandon

+6

Solo se si desidera un codice CSS non valido ... :) http://www.w3.org/TR/CSS2/syndata.html#characters – trapper

12

A seconda del formato ci sarà un certo numero di modi per raggiungere tale obiettivo. Se i tuoi div sono accatastati fianco a fianco sul desktop e verticalmente sul dispositivo mobile, potresti essere in grado di utilizzare una combinazione di float e query multimediali per farli visualizzare nell'ordine corretto.

In caso contrario, il fallback finale potrebbe essere la creazione di 4 div.

<div>one</div> 
<div>three(mobile)</div> 
<div>two</div> 
<div>three(desktop)</div> 

Quindi utilizzare le query multimediali per nascondere il relativo "tre" div a seconda del dispositivo.

+1

Questo metodo non sarebbe una cattiva pratica dal punto di vista delle prestazioni? Il DOM mobile sarebbe gonfiato dal contenuto nascosto. – JonnyIrving

+0

Secondo me non c'è niente di male in questo caso avere un div extra, piuttosto che usare js per una cosa così piccola. – electroid

0

codice seguente impilare il div in mobile e sul tavolo sarebbe un layout di colonna 2

<div class="main"> 

</div> 
<div class="aside"> 
</div> 

<style type="text/css"> 
    @media only screen and (min-width: 768px) { 
     .main {float:right;width:60%} 
     .aside {float:left;width:40%} 
    } 
</style> 
0

Prova con: visualizzazione: flettere; direzione flex: colonna;

Maggiori informazioni qui: https://developer.mozilla.org/en-US/docs/Web/CSS/flex

+5

Potresti estrarre le informazioni rilevanti dalla pagina collegata e pubblicarle nella risposta? Se la pagina collegata cambia, questa risposta diventa molto meno preziosa. –

10

Resurrecting questa domanda perché mi sono imbattuto in via google, e le risposte esistenti sono obsoleti. La soluzione che ho usato è stata la only one with the downvote, quindi ci lavorerò sopra.

Utilizzando display:flex vi permetterà di riordinare gli elementi utilizzando le proprietà column/column-reverse:

.container{ display:flex;flex-direction:column } 
@media screen and (min-width:600px) { 
    .container{ flex-direction:column-reverse } 
} 

Vedere la JSFiddle here, e alcuni tavoli di supporto here.

controllare anche un paio di CSS postprocessori here e here

+0

e se vuoi che gli elementi siano affiancati puoi usare 'flex-direction' con' row' e 'row-reverse'. – Yay295

+0

Puoi anche mescolarli e far affiancare gli elementi in un caso e uno sopra l'altro in un altro caso. – Yay295

Problemi correlati