2012-07-12 29 views
5

Trabajo para un estudio de diseño creativo al que le gusta romper paradigmas y convenciones para crear diseños de sitios web únicos y recientemente comenzamos a desarrollar diseños de sitios web horizontales. Si bien los diseños de sitios web horizontales se ven "geniales", todavía tengo que encontrar la manera de hacerlos fluidos y receptivos, como lo harías con un sitio web basado en una grilla vertical, listo para usar.Cómo crear un diseño horizontal receptivo mediante CSS?

Normalmente, para un sitio web vertical con un contenedor, tendría un ancho basado en porcentaje en su elemento de contenedor, luego establezca un ancho máximo. Con un diseño receptivo, su contenido se desplaza infinitamente fuera de la página, puede variar en anchura, especialmente si el contenido es único y, por lo tanto, la fórmula objetivo/contexto * 100 realmente no funciona (¿o sí?).

¿Existe quizás una forma de tener alturas de respuesta, relleno y márgenes en los elementos para que funcione como lo haría con un sitio web receptivo basado en la cuadrícula? No me importa tener que usar Javascript, pero una solución CSS sería ideal.

Para su referencia un ejemplo del tipo de diseño que estoy tratando de crear:

enter image description here

+0

El único problema es que el sitio en el que estoy construyendo, por ejemplo, tiene un bloque de contenido que tiene una anchura variable, porque se trata de utilizar un plugin de mampostería horizontal por lo que el contenedor se expande y cambios en el ancho dependiendo sobre cómo se baraja el contenido y el tamaño del contenido. Tampoco sé la altura porque es toda la altura basada en el porcentaje, por lo que realmente no hay un contexto. Supongo que esto no es tan fácil como parece a nuestros diseñadores;) –

+0

Sí, esta es un área nueva para muchos de nosotros, pero veo una mayor cantidad de diseños horizontales completos o secciones que tienen un amplio contenido horizontal que se desplaza a la vista según la acción o el progreso del usuario. – artlung

+0

Usaría el modelo de caja flexible de CSS si tuviera que hacer este tipo de diseño hoy. Flex es un método de diseño increíblemente poderoso compatible con todos los navegadores modernos. Utilicé Flexbox en 2012 para un diseño complicado sin tener que recurrir a javascript ya que nuestro programador hacía un lío en el diseño. Esto era un poco arriesgado en aquel entonces, ya que el estándar todavía estaba en proceso de cambio, pero desde entonces entró en la última convocatoria.Incluso si usa especificaciones previas o navegadores sin soporte, hay algunos geniales polyfill para usar. – Thurstan

Respuesta

4

Usted puede hacer esto con jQuery mediante el cálculo de elementos secundarios de la div página recipiente .outerWidth y añadiendo a todos juntos y añadiendo que a la página o estructura .css('width')

HTML div:

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

EDIT: Olvidé agregar el css, pero el punto principal aquí es que querría que los divs secundarios de #main flotaran hacia la izquierda.

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

Esto es lo que hago actualmente, bueno algo como esto. Se siente hambriento, considerando que los diseños horizontales están comenzando a ganar más tracción, uno pensaría que habría una manera más agradable de hacer un diseño horizontal receptivo. Gracias por la respuesta, esto es genial. –

1

Hay muchas maneras de hacer esto.

Si conoce la anchura exacta de la página se puede simplemente hacer un div contenedor, establecer el ancho completo, y luego flotar su lado divs contenido al lado del otro en el interior del envoltorio de este modo:

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

Si saber el ancho exacto, esta es la solución más simple.

Si el ancho es desconocido o varía, puede usar JavaScript para calcular el ancho completo y aplicarlo al envoltorio con los mismos resultados. Esto debería funcionar para la mayoría de las necesidades.

+1

La pregunta es ¿cómo puedo hacer que un diseño horizontal responda sin conocer anchos ni alturas? Los sitios web receptivos convencionales se basan en una cuadrícula con contenedores en los que la horizontalidad no tiene ancho y alto varía en función del navegador. Supongo que a menos que use un JS pesado que cause una gran cantidad de repintados de página, entonces esto no es realmente posible más allá de lo que ya podemos hacer. –

Cuestiones relacionadas