2012-10-12 338 views
11

Estoy creando un sitio web receptivo, y para una buena experiencia de usuario, necesito algunos cambios de diseño de un dispositivo móvil a otro. Específicamente, necesito cambiar el orden de algunos elementos HTML.Cambiar el orden de los elementos HTML cuando el diseño cambia en Responsive Web Design

Necesito que los elementos HTML estén en un orden diferente para el escritorio en comparación con el móvil.

móvil

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

Orden de encendido de escritorio

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

Esto se simplifica versión de lo que quiero lograr. Creo que se llama progressive enhancement. ¿Cómo los expertos en diseño web mueven los elementos html? Con JavaScript? ¿Sería normal? ¿Hay algún complemento jQuery?

Respuesta

11

sólo tiene que utilizar jQuery para cambiar el DOM como se requiere en torno

if (mobile == true) { 

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

, gracias. Simplemente no estaba seguro de si esta es una buena práctica. En mi caso particular, si tuviera que manipular el DOM, entonces el esquema de HTML5 se vio afectado de la manera que no quería. Parece que tengo que elegir entre una buena experiencia visual del usuario que cumpla con la necesidad del negocio y un esquema HTML5 bien estructurado. –

+0

¿no debería el ejemplo leer '$ ('div.3') ...' en lugar de 'tres'? – BandonRandon

+6

Solo si desea CSS no válido ... :) http://www.w3.org/TR/CSS2/syndata.html#characters – trapper

12

Dependiendo de su diseño habrá un número de maneras de lograr esto. Si sus divs se apilan una al lado de la otra en el escritorio y verticalmente en el móvil, es posible que pueda usar una combinación de flotantes y consultas de medios para que se muestren en el orden correcto.

Si no, su última alternativa podría ser crear 4 divs.

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

A continuación, utilice consultas de medios para ocultar los "tres" DIV correspondientes según el dispositivo.

+1

¿No sería este método una mala práctica desde el punto de vista del rendimiento? El DOM móvil estaría hinchado por contenido oculto. – JonnyIrving

+0

En mi opinión, no hay nada malo para tener un div adicional en ese caso, en lugar de usar js para algo tan pequeño. – electroid

0

siguiente código se acumulará el div en el móvil y en el escritorio sería un diseño de la columna 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

Pruebe con: pantalla: flexionar; flex-direction: column;

Más información aquí: https://developer.mozilla.org/en-US/docs/Web/CSS/flex

+5

¿Podría extraer la información relevante de la página enlazada y publicarla en la respuesta? Si la página enlazada cambia, entonces esta respuesta se vuelve mucho menos valiosa. –

10

Resurrecting esta pregunta porque me encontré con él a través de Google, y las respuestas existentes no están actualizados. La solución que terminé usando fue only one with the downvote, así que me extenderé más.

Usando display:flex le permitirá volver a ordenar los elementos que utiliza las propiedades column/column-reverse:

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

Ver el jsFiddle here, y algunas mesas de apoyo here.

También puedes ver un par de CSS post-procesadores here y here

+0

y si desea que los elementos estén uno al lado del otro, puede usar 'flex-direction' con' row' y 'row-reverse'. – Yay295

+0

Incluso puede mezclarlos y hacer que los elementos estén uno al lado del otro en un caso y uno encima del otro en otro caso. – Yay295

Cuestiones relacionadas