Foros del Web » Creando para Internet » CSS »

3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio.

Estas en el tema de 3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio. en el foro de CSS en Foros del Web. Hola. Estoy haciendo una maquetación con un header, tres columnas y footer. En cuanto a las tres columnas deben de quedar la izquierda pegada justo ...
  #1 (permalink)  
Antiguo 19/06/2017, 05:11
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.893
Antigüedad: 14 años, 7 meses
Puntos: 60
3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio.

Hola.

Estoy haciendo una maquetación con un header, tres columnas y footer. En cuanto a las tres columnas deben de quedar la izquierda pegada justo a la izquierda a 0px, la derecha justo a la derecha 0px y la del medio justo en el centro y a la vez serán responsive.

Hasta ahora he probado varias formas, por ejemplo así:

Código HTML:
Ver original
  1. <div id="pagewrap">
  2.  
  3.     <header>
  4.         <h1>3 Column Responsive Layout</h1>
  5.     </header>
  6.      <div id="centrado"> <!-- Prueba de centrado -->
  7.        
  8.    
  9.     <section id="content">
  10.         <h2>1st Content Area</h2>
  11.         <p>This page demonstrates a 3 column responsive layout, complete with responsive images and jquery slideshow.</p>
  12.     </section>
  13.    
  14.     <section id="middle">
  15.         <h2>2nd Content Area</h2>
  16.         <p>At full width all three columns will be displayed side by side. As the page is resized the third column will collapse under the first and second. At the smallest screen size all three columns will be stacked on top of one another.</p>
  17.         <p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.</p>
  18.     </section>
  19.  
  20.     <aside id="sidebar">
  21.         <h2>3rd Content Area</h2>
  22.         <p>Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>
  23.         <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
  24.         <p>Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>       
  25.     </aside>
  26.     </div>  <!-- /Prueba de centrado -->
  27.     <footer>
  28.         <h4>Footer</h4>
  29.         <p>Footer text</p>
  30.     </footer>
  31.  
  32. </div>

Y este es el css que uso:

Código CSS:
Ver original
  1. *{margin: 0; padding: 0; border: 0;}
  2. html, body{height:100%;}
  3. body {
  4.   font-family: 'Open Sans', sans-serif;
  5.   color: white;
  6. }
  7.  
  8. /* STRUCTURE */
  9. #pagewrap {
  10.     background: yellow;
  11.     margin: 0 auto;    
  12.     text-align: center;/*Aquí centro las columnas y si solo pongo la central queda al centro.*/
  13.     width: 100%;    
  14. }
  15. header {
  16.     background: black;
  17.     height: 100px; 
  18. }
  19. #content {
  20.     background: blue;    
  21.     display:inline-block;
  22.     left: 0;
  23.     position: absolute;  
  24.     vertical-align:top;
  25.     width: 20%;
  26. }
  27. #middle {
  28.     background: green;     
  29.     display: inline-block;
  30.     margin:0 auto;  
  31.     text-align: left;
  32.     vertical-align:top;
  33.     width:46%; 
  34. }
  35. #sidebar {
  36.     background:pink;   
  37.     display:inline-block;  
  38.     position: absolute;
  39.     right: 0;      
  40.     vertical-align:top;
  41.     width: 20%;
  42. }
  43. footer {   
  44.     padding: 0 15px;
  45.     background: brown;
  46. }

Hasta ahi parece que funciona, la columna izquierda se situa pegada a 0, la derecha pegada a la derecha total en 0 y la del centro al centro pero por ejemplo veo que el contenido total del alto de la derecha al bajar pasa por encima del footer y no lo desplaza. ¿Como podría solucionarlo?

¿Hay alguna otra manera mejor de hacerlo? Por ahora me gustarïa hacerlo por porcentajes para hacerlo lo mäs flexible posible sin usar float y solo usando display:inline-block; tampoco flex-box o grids pero si las otras alternativas ya son mas viables hoy día soy todo oido a cualquier otra opción nueva de hoy día.

Saludos.
  #2 (permalink)  
Antiguo 19/06/2017, 07:46
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 5.781
Antigüedad: 9 años, 7 meses
Puntos: 936
Respuesta: 3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio

Porque no quieres usar flex?

No te funciona porque le aplicas ´posición absoluta., quitasela y funcionara
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #3 (permalink)  
Antiguo 19/06/2017, 08:08
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.893
Antigüedad: 14 años, 7 meses
Puntos: 60
Respuesta: 3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio

Hola ArturoGallegos.

La verdad es que todavía no he usado flex para los trabajos y en este proyecto me han pedido solo cambiar el css y la parte principal desde el método que indico y si es posible sin usar float. Tengo intención de empezar a usarlo en el próximo al igual que el tema nueo de grids.

En cuanto a tu respuesta, tambien lo probé quitando en izquierda y derecha position:absolute, pero si te fijas ahora ya no se pegan a la izquierda ni a la derecha, se van al centro con la del medio.

¿Es posible alinearlos de esta nueva manera a la izquierda 0 y derecha 0?

Gracias por tu respuesta, saludos.
  #4 (permalink)  
Antiguo 19/06/2017, 11:17
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 8.932
Antigüedad: 14 años, 7 meses
Puntos: 1796
Respuesta: 3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio

El flexbox es sumamente fácil.

Básicamente le puse flexbox a tu contenedor y le quité el inline y el position absolute a los 3 elementos.

Mira que limpio y lindo queda.

Código CSS:
Ver original
  1. #centrado {display: -ms-flexbox;
  2.     display: flex;}
  3.  
  4. #content {
  5.     background: blue;    
  6.     width: 20%;}
  7.  
  8. #middle {
  9.     background: green;      
  10.     width:46%;}
  11.  
  12. #sidebar {
  13.     background:pink;    
  14.     width: 20%;}

https://jsfiddle.net/1synrhgs/2/

Una versión más limpia: https://jsfiddle.net/1synrhgs/3/

No creo que haya razón ya para no usar flexbox. Es aceptado por todos los navegadores. https://caniuse.com/#feat=flexbox

La otra alternativa es usar float y poner un clear all al footer. Pero el position absolute no.

---

La alternativa al usar el inline-block es que tus porcentajes cierren correctamente 20%+60%+20= 100% y el medianil dejarlo con padding. El problema es que tienes que eliminar el espacio blanco entre las etiquetas del Html.

Última edición por Rafael; 20/06/2017 a las 10:31
  #5 (permalink)  
Antiguo 23/06/2017, 17:37
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.893
Antigüedad: 14 años, 7 meses
Puntos: 60
Respuesta: 3 columnas, izquierda y derecha pegadas a 0 y la del centro justo en medio

Hola de nuevo.

Rafael, he probado todas las opciones y la verdad es que flex-box tiene muy buena pinta y será lo próximo que aplique a un proyecto, ya que en este es un portal con muchísimas cosas y quizás me es más difícil ahora cambiarlo todo a flexblox por la gran cantidad y variedad de código que tiene dicho proyecto que tengo que cambiar.

He mirado un poco por encima aparte de tu ejemplo en otras páginas y me voy a poner con ello en cuanto termine este, aún así por ejemplo he probado quitando el div centrado y llevando display: -ms-flexbox; y diisplay: flex; a pagewrap y no me sale igual, así que tengo mucho camino por delante en eso.

En cuanto a la otra manera por ahora el cliente no ve problema en dejar los margenes separados en las esquinas con tal de que todo esté centrado y sea lo más flexible posible para entrar en responsive, así que he quitado todos los float posibles y con porcentajes me va bastante mejor:

Código HTML:
Ver original
  1. <div id="pagewrap">
  2.  
  3.     <header>
  4.         <h1>3 Column Responsive Layout</h1>
  5.     </header>
  6.      <div id="centrado"> <!-- Prueba de centrado -->
  7.        
  8.    
  9.     <section id="content">
  10.         <h2>1st Content Area</h2>
  11.         <p>This page demonstrates a 3 column responsive layout, complete with responsive images and jquery slideshow.</p>
  12.     </section>
  13.    
  14.     <section id="middle">
  15.         <h2>2nd Content Area</h2>
  16.         <p>At full width all three columns will be displayed side by side. As the page is resized the third column will collapse under the first and second. At the smallest screen size all three columns will be stacked on top of one another.</p>
  17.         <p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.</p>
  18.         <div class="middle-block-left">
  19.             <h2>Soy bloque izquierdo</h2>
  20.         </div>
  21.         <div class="middle-block-right">
  22.             <h2>Soy bloque derecho</h2>
  23.         </div>
  24.     </section>
  25.  
  26.     <aside id="sidebar">
  27.         <h2>3rd Content Area</h2>
  28.         <p>Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>
  29.         <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
  30.         <p>Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>       
  31.     </aside>
  32.     </div>  <!-- /Prueba de centrado -->
  33.     <footer>
  34.         <h4>Footer</h4>
  35.         <p>Footer text</p>
  36.     </footer>
  37.  
  38. </div>

Código CSS:
Ver original
  1. #pagewrap {
  2.     background: yellow;
  3.     margin: 0 auto;    
  4.     text-align: center;/*Aquí centro las columnas y si solo pongo la central queda al centro.*/
  5.   width: 100%;  
  6. }
  7. header {
  8.     background: black;
  9.     height: 100px; 
  10. }
  11. #content {
  12.     background: blue;
  13.     border: 1px solid #d4d4d4;   
  14.   display:inline-block;
  15.   margin: 30px 0;
  16.   vertical-align:top;
  17.   width: 24.62%;   
  18. }
  19. #middle {
  20.     background: green;
  21.     border: 1px solid #d4d4d4;
  22.   display: inline-block;
  23.     margin: -38px 1.49% 0;
  24.     text-align: left;
  25.     vertical-align:top;  
  26.   width:46.0%;/*Ancho resistente seguro sin que los márgenes se peguen a los laterales 590px*/
  27. }
  28. .middle-block-left{
  29.     background: blue;
  30.     display: inline-block;
  31.     margin: 0.75%;
  32.     width: 48%;
  33. }
  34. .middle-block-right{
  35.     background: red;
  36.     display: inline-block;
  37.     margin: 0.75%;
  38.     width: 48%;
  39. }
  40. #sidebar {
  41.     background:pink;
  42.     border: 1px solid #d4d4d4; 
  43.     display:inline-block;    
  44.     margin: 30px 0;    
  45.     vertical-align:top;    
  46.     width: 24.62%;
  47. }
  48. footer {   
  49.     padding: 0 15px;
  50.     background: brown;
  51. }

Gracias de nuevo por tu gran ayuda y explicación, saludos



La zona horaria es GMT -6. Ahora son las 15:06.