CSS columnas fluidas, márgenes fijos; el santo grial de los santos griales


Actualización y Resumen

Me siento obligado a hacer esta pregunta más clara, ahora que hay una recompensa adjunta.

(Además, estoy bastante seguro de que esto será un juego de niños cuando se soporte el valor unitario calc() CSS3, haciendo algo como width: calc(25% - 5px); aunque probablemente estaremos navegando por Internet en nuestras mentes en ese momento )

Estoy trabajando en un framework CSS para algunos proyectos que comparten requisitos de diseño; es decir, un diseño fluido de 12 columnas. Usando flotado .column elementos con anchuras porcentuales de (100% / 12) x col_size, esto es razonablemente fácil. Sin embargo, el problema viene con la adición de márgenes fijos (o cualquier forma de espaciado) entre columnas.

Mi intento inicial usó las columnas fluidas como se describe, con un hijo .panel anidado en cada una. Sigue el fragmento HTML / CSS ( reducido por brevedad):

.column{
    float: left;
    display: inline-block;
}

.width-01{ width:  8.3333%; }
.width-02{ width: 16.6666%; }
.width-03{ width:      25%; }
/* etc */

.panel{
    width: 100%;
    padding: 5px;
    box-sizing: border-box; /* so padding doesn't increase width */
}
<div class="column width-02">
    <div class="panel">Width-02</div>
</div>
<div class="column width-03">
    <div class="panel">Width-03</div>
</div>
<div class="column width-02">
    <div class="panel">Width-02</div>
</div>
<div class="column width-05">
    <div class="panel">Width-05</div>
</div>

Este fragmento produciría un diseño similar al de la imagen de abajo, sin embargo todos los elementos .panel tienen 5px relleno en por todos lados. Estoy tratando de hacer que el borde de contenido de las columnas exteriores esté alineado con el borde del puerto de vista ( o contenedor padre para el caso). Otro enfoque sería eliminar la clase .panel por completo, y simplemente ir con columnas:

.column{
    float: left;
    display: inline-block;
    padding-left: 10px;
    box-sizing: border-box;
}

.column:first-child{ padding-left: 0px; }

.width-01{ width:  8.3333%; }
.width-02{ width: 16.6666%; }
.width-03{ width:      25%; }
/* etc */
<div class="column width-02">Width-02</div>
<div class="column width-03">Width-03</div>
<div class="column width-02">Width-02</div>
<div class="column width-05">Width-05</div>

De nuevo, esto funciona bien, produciendo resultados aún más cercanos a los de la imagen de abajo, sin embargo ahora el problema (actual) es que el relleno está comiendo el ancho de las columnas arruinando la distribución del ancho. La columna :first-child tiene 10 píxeles (o cualquiera que sea el tamaño del margen) mayor ancho de área de contenido que sus hermanos.

Esto puede parecer inocuo, incluso imperceptible; sin embargo, hay algunos casos en los que tener exacto (lo más exacto posible ) la distribución del ancho entre los elementos es necesaria, o haría las cosas más fáciles.

Y así, ya sea usando relleno, margen, o alguna combinación de los mismos; es ¿hay alguna solución para columnas fluidas, márgenes fijos, con distribución uniforme de espacio de canal que no robe el área de contenido "marginal" (***jaja*) de las columnas adyacentes?**


Pregunta inicial

Debido a la simple falta de resultados en mis búsquedas e intentos, he llegado a la conclusión de que esto es imposible. Si alguna parte puede dar una respuesta, sin embargo, estoy seguro de que es aquí.

¿Hay alguna manera, usando CSS puro, de lograr un diseño de columnas de ancho fluido ¿con márgenes de ancho fijos?

Nota importante: Esta figura es solo un ejemplo, y no el diseño específico que estoy buscando lograr. Una solución dada debe permitir cualquier combinación de columnas adyacentes, la distribución de ancho total de 12 o menos. Considere el popular 960 grid como referencia.)

super_awesome_layout.css
Nota: En un diseño de 12 columnas, la distribución de ancho de las columnas en la imagen es 2, 3, 2 y 5 respectivamente.

Hasta ahora, he recurrido a una cuadrícula que, usando porcentajes, casi logra esto. El problema es que, para lograr los márgenes, cada columna requiere un hijo adicional ( Los llamo .panel) con:

width: 100%;
box-sizing: border-box;
padding: 10px;

Esto es, nuevamente casi , bien; el problema con este enfoque es que la primera y la última columna tienen márgenes exteriores" (10px) y los" márgenes " entre cada columna se duplican (2 x 10px)

Ciertamente, con la inclusión del nuevo tipo de valor CSS3 calc(), esto podría resolverse mucho más fácilmente. Algo en la dirección de:

.width-12 > .panel{ width: 100%; }
.width-09 > .panel{
    width: calc(75% - 10px);
    margin: ...;
}

Tengo algunas correcciones de Javascript, he hackeado algunas cosas que "funcionan", pero estoy en una búsqueda. Esperemos que el más sagrado de los griales exista.

La siguiente solución, y la que @avall proporcionó (aunque ciertamente una buena opción para simplificar) desafortunadamente no son lo que estoy buscando. Principal el problema es que los márgenes no se distribuyen uniformemente entre las columnas.

La única forma en que puedo ver esto funcionando es reduciendo el relleno .panel a 5px y algo así como:

.column:first-child > .panel {
    padding-left: 0px;
}

.column:last-child > .panel {
    padding-right: 0px;
}

/* not necessary? in any case, haven't tested */
.column:only-child > .panel {
    padding-right: 0px;
    padding-left: 0px;
}

Esta solución no es aceptable, solo porque IE8 no reconoce la :last-child (y para el caso :only-child) pseudo selectores.

Author: Mr. Polywhirl, 2011-08-25

10 answers

Finalmente me di cuenta. Después de los cientos de horas desperdiciadas durante la última década (aunque confío en algunos CSS que no habrían funcionado hace un año de todos modos). Lo resolví sin trampas. y en IE8+.

Por favor, preparen la Música 2001: Una Odisea Espacial porque estoy aterrizando este barco.

La genialidad y el truco de este método es usar elementos de bloque en línea y luego usar el espaciado de palabras para contrarrestar usando un margen derecho negativo. Negativo el margen derecho por sí solo unirá los elementos, lo que le permite tener un ancho del 100% establecido y aún así encajar las cosas en el medio, pero dejar que los elementos se superpongan. Establecer un margen negativo en el padre solo deshace el margen hijo en lo que respecta al efecto en la interacción con el ancho total (la marca mágica "100% de ancho" que estamos tratando de alcanzar). El relleno solo sirve para aumentar el tamaño del elemento y es inútil con respecto al margen de acción contraria. A menudo se utiliza con el tamaño de la caja en el jurado soluciones amañadas a este problema, a expensas de perder la capacidad de usar relleno en todo lo contrario (y margen) y probablemente requieren más elementos de envoltura.

El espaciado de palabras proporciona la mágica "tercera vía" para agregar o eliminar la distancia horizontal entre dos elementos, siempre que sean bloques en línea, ya que se contarán como una sola "palabra" en ese caso, y cualquier espacio en blanco entre ellos colpapse hasta la única propiedad controlable "espaciado de palabras". Aparte de este truco estoy no es consciente de otra manera de obtener este 100% resultado.

Humildemente presento la respuesta definitiva al problema de las columnas flexibles de canalones fijos. Por la presente nombro mi solución "la maniobra omega". Viene con la capacidad de manejar columnas de ancho mixto arbitrario (agregando hasta un 100% de ancho total exactamente o ligeramente menos para el redondeo), cualquier tamaño de canal, cualquier cantidad predefinida de columnas de ancho, maneja cantidades arbitrarias de filas con envoltura automática y usa elementos de bloque en línea, por lo que proporciona la opciones de alineación vertical que vienen con bloque en línea, Y no requiere ningún marcado adicional y solo requiere una declaración de clase única en el contenedor (sin contar la definición de anchos de columna). Creo que el código habla por sí mismo. Aquí está la implementación de código para 2-6 columnas usando canaletas 10px y clases auxiliares de bonificación para porcentajes.

EDITAR: interesante acertijo. He conseguido dos versiones ligeramente diferentes; una para mozilla e ie8+, la otra para webkit. Parece que el el truco de espaciado de palabras no funciona en webkit, y no se por qué la otra versión funciona en webkit pero no en ie8+/mozilla. La combinación de ambos te da cobertura sobre todo y estoy dispuesto a apostar que hay una manera de unificar esta táctica o algo muy similar para trabajar alrededor del tema.

EDIT2: En su mayoría lo tengo! Magical text-align: justify consigue que WebKit esté casi allí con el espaciado entre palabras. El espacio parece un poco apagado, como una cuestión de píxeles a la derecha y tal vez un extra en las canaletas. Pero es utilizable y parece más confiable sobre mantener las columnas que cualquier cosa que haya usado antes. Nunca se corta a menos columnas, se comprimirá hasta que el navegador obtiene una barra de desplazamiento horizontal.

Edit3: Lo tengo un poco cerca de perfecto. Establecer el tamaño de fuente a 0 normaliza la mayoría de los problemas restantes con el espaciado que está desactivado. Solo tengo que arreglar IE9 ahora que colapsa si la fuente es tamaño 0.

EDIT4: Obtuve la respuesta a IE de algunos otros posts de fluid width: -ms-text-justify: distribute-all-lines. Probado en IE8-10.

/* The Omega Maneuver */
[class*=cols] { text-align: justify; padding-left: 10px; font-size: 0;
             -ms-text-justify: distribute-all-lines; } 

 [class*=cols]>* { display: inline-block; text-align: left; font-size: 13px;
                word-spacing: normal; vertical-align: top;
                -webkit-box-sizing: border-box;
                   -moz-box-sizing: border-box;
                        box-sizing: border-box; }

.cols2 { word-spacing: 20px; padding-right: 20px; }
.cols3 { word-spacing: 30px; padding-right: 30px; }
.cols4 { word-spacing: 40px; padding-right: 40px; }
.cols5 { word-spacing: 50px; padding-right: 50px; }
.cols6 { word-spacing: 60px; padding-right: 60px; }

  .cols2 > * { margin-right: -10px; }
  .cols3 > * { margin-right: -20px; }
  .cols4 > * { margin-right: -30px; }
  .cols5 > * { margin-right: -40px; }
  .cols6 > * { margin-right: -50px; }

Algunos ayudantes:

.⅛, .⅛s >* { width: 12.50%; }
.⅙, .⅙s >* { width: 16.66%; }
.⅕, .⅕s >* { width: 20.00%; }
.¼, .¼s >* { width: 25.00%; }
.⅓, .⅓s >* { width: 33.00%; }
.⅜, .⅜s >* { width: 37.50%; }
.⅖, .⅖s >* { width: 40.00%; }
.½, .½s >* { width: 50.00%; }
.⅗, .⅗s >* { width: 60.00%; }
.⅝, .⅝s >* { width: 62.50%; }
.⅔, .⅔s >* { width: 66.00%; }
.¾, .¾s >* { width: 75.00%; }
.⅘, .⅘s >* { width: 80.00%; }
.⅚, .⅚s >* { width: 83.33%; }
.⅞, .⅞s >* { width: 87.50%; }
.blarg-five-twelfs { width: 41.66%; }

Puedes presenciar mi obra maestra en acción entre un campo de gloria aquí: http://jsfiddle.net/xg7nB/15 /

<div class="cols4">
    <div class="⅙">This is my magnum opus</div>
    <div class="¼">I finally beat css</div>
    <div class="⅙">⚉ ☺ ☻ ♾ ☢</div>
    <div class="blarg-five-twelfs">I BEAT IT FOREVER</div>
</div>

La implementación mínima absoluta, usando como ejemplo 4 cols de ancho igual (25%) y canalones 10px es así:

.fourEqualCols { word-spacing: 40px; padding: 0 40px 0 10px;
                 text-align: justify; font-size: 0;
                 -ms-text-justify: distribute-all-lines; }

.fourEqualCols>* { margin-right: -30px; width: 25%;
                   display: inline-block; word-spacing: normal;
                   text-align: left; font-size: 13px; }


<div class="fourEqualCols ">
  <div>GLORIOUSLY CLEAN MARKUP</div>
  <div>I hate extra markup and excessive class props</div>
  <div>Naked code</div>
  <div>get intimate</div>
</div>

Soooo este código esencialmente reemplaza casi cualquier marco de cuadrícula existente ¿verdad? Si puede establecer arbitrariamente canalones y luego simplemente hacer conjuntos de columnas que llegan a 100% ancho, que es estrictamente superior a la mayoría / todos los marcos de cuadrícula de hecho no es? Si ya no está desarrollando para IE7 como muchos de nosotros, entonces eso combinado con el tamaño de la caja: border-box hace que el relleno y el borde también no sean un problema.

Editar: oh derecha que quería estar al ras con los lados del contenedor. No hay problema con esto, tuve que agregar específicamente canalones laterales para que podamos cambiar algunos valores por 10 y deshacernos del relleno y voila. http://jsfiddle.net/bTty3 /

[class^=cols] { text-align: justify; font-size: 0;
             -ms-text-justify: distribute-all-lines; } 

 [class^=cols] >* { display: inline-block; text-align: left; font-size: 13px;
                word-spacing: normal; vertical-align: top;
                -webkit-box-sizing: border-box;
                   -moz-box-sizing: border-box;
                        box-sizing: border-box; }

.cols2 { word-spacing: 20px; padding-right: 10px; }
.cols3 { word-spacing: 30px; padding-right: 20px; }
.cols4 { word-spacing: 40px; padding-right: 30px; }
.cols5 { word-spacing: 50px; padding-right: 40px; }
.cols6 { word-spacing: 60px; padding-right: 50px; }
 .cols2 >* { margin-right: 0 }
 .cols2 >* { margin-right: -10px; }
 .cols3 >* { margin-right: -20px; }
 .cols4 >* { margin-right: -30px; }
 .cols5 >* { margin-right: -40px; }
 .cols6 >* { margin-right: -50px; }

Mismo html

<div class="cols4">
    <div class="⅙">This is my magnum opus</div>
    <div class="¼">I finally beat css</div>
    <div class="⅙">⚉ ☺ ☻ ♾ ☢</div>
    <div class="blarg-five-twelfs">I BEAT IT FOREVER</div>
</div>

I beat CSS aquí está tu prueba

 64
Author: 26 revs, 2 users 100%user748221,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-01 15:03:53

Pruebe esta solución pura de CSS2: violín de demostración

CSS base (fiddle sin los cosméticos):

html, body {
    padding: 0;
    margin: 0;
}
#wrap {
    padding-right: 30px;
    overflow: hidden;
}
.col {
    float: left;
    margin-left: 40px;
    margin-right: -30px;
}
.col:first-child {
    margin-left: 0;
}
.small {
    width: 16.66%;
}
.medium {
    width: 25%;
}
.large {
    width: 41.66%;
}

HTML:

<div id="wrap">
    <div class="col small"></div>
    <div class="col medium"></div>
    <div class="col small"></div>
    <div class="col large"></div>
</div>

Probado en Win7 en IE7, IE8, IE9, Opera 11.50, Safari 5.0.5, FF 6.0, Chrome 13.0.


Actualización:

Ahora, si desea que esto funcione con un número arbitrario de columnas, debe agregar una clase adicional al contenedor especificando el número de columnas:

<div class="cols-12 count-04">
    <div class="col width-02"></div>
    <div class="col width-03"></div>
    <div class="col width-02"></div>
    <div class="col width-05"></div>
</div>

Véase este fiddle actualizado demuestra un número de varios recuentos de columnas.

Posible error:

Teóricamente, en mi humilde opinión, esta solución debería funcionar para cualquier número de columnas para cada ancho mínimo posible de columna en cualquier ancho de ventana del navegador. Pero parece que todos los navegadores no son capaces de manejar: 1. un gran número de columnas de ancho de columna 1, o 2. un pequeño ancho de ventana del navegador.

Tenga en cuenta que todos los navegadores con un ancho mínimo de 1440 píxeles, lo que equivale a 12 veces 120 píxeles (el espacio ocupado por todos los márgenes de 10px), manejar la solución muy bien. Y cuando se utilizan 2 o más columnas de ancho de columna, el requisito para el ancho mínimo del navegador de hecho se reduce a 720 píxeles (6 * 120px). Este último caso suena más realista, pero aún así, no puedo explicar este comportamiento del navegador.

Traté de solucionar el problema mediante la introducción de un adicional última columna clase como lo demuestra este violín , pero no resuelve el problema para pequeños anchos de navegador. Sin embargo, resuelve un pequeño error de redondeo debido a los porcentajes de ancho roto, pero supongo que ese problema podría ignorarse.

Me gustaría escuchar a otros expertos en css en este caso, así que agregué una recompensa.

 8
Author: NGLN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-28 15:00:38

¿Por qué no usas

.column > .panel {
    padding: 10px 0 10px 10px;
}

.column:first-child > .panel {
    padding-left: 0px;
}

Hará espacios de 10px solo entre cajas y sin usar last-child.

 7
Author: avall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-25 13:46:50

Echa un vistazo a la respuesta de thirtydot en este hilo para un CSS/HTML puro (Diseño fluido con "columnas" igualmente espaciadas sin JavaScript)...

Ancho de fluido con DIVs igualmente espaciados

Http://jsfiddle.net/thirtydot/EDp8R /

La modificación del JSFiddle demuestra que se puede hacer que las "columnas" tengan diferentes anchos fijos y aún tengan márgenes iguales y fluidos.

Http://jsfiddle.net/EDp8R/43 /

Finalmente, otro ejemplo usando porcentajes mientras se mantienen márgenes iguales y fluidos.

Http://jsfiddle.net/EDp8R/45 /

Me doy cuenta de que esto puede no ser una solución exacta, pero te acerca bastante, creo.

 2
Author: Sparky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:03

En referencia a la Pregunta Original "¿Hay alguna manera, usando CSS puro, de lograr un diseño de columnas de ancho fluido con márgenes de ancho fijos?"

Es notable lo extremadamente difícil que resulta CSS con este tipo de preguntas. La semana pasada he estado trabajando en una ' plantilla base 'para crear mi propio' santo grial', incluyendo borde, margen y rellenos... Parece que CSS falla para este tipo de preguntas. Aunque la pregunta en mente es bastante fácil, se convierte en (casi?) imposible lograr en CSS, especialmente entre navegadores.

La parte divertida es que estas preguntas se resuelven fácilmente usando tablas. No entiendo por qué estamos siendo forzados por la sociedad web a usar div en su lugar para argumentos tan vagos como "semántica" y "visión general fácil", ya que la mayoría de los argumentos son débiles o incluso falsos. Las personas que dicen que las tablas están dando más problemas, claramente no entienden la verdadera dificultad que se encuentra dentro de CSS.

De todos modos, si desea tener una estructura de tabla (como columnas son parte de una tabla) Sugiero usar 'display:table'.

Para lograr la imagen debajo de la pregunta original con CSS puro, se podría usar lo siguiente:

CSS

html,body{
    margin: 0px; 
    padding: 0px; 
    height: 100%; 
    width: 100%;
    overflow: auto;
}
.table{
    background: pink;
    display: table;
    width: 100%;
    height: 100%;
}
.tableRow{
    display: table-row;         
}
.tableCell{
    display: table-cell;
    vertical-align: top;
    height: 100%;  
}
/*
    Ensures the full size of the table-cell has the behaviour of a block-element. 
    This is needed, because 'table-cell' will behave differently in different browsers.
*/
.tableCell>div{
    height: 100%;
}
/*
    Padding has to be used instead of margin in 'border-box' modus.
*/
.tableCell>div>div{
    height: 100%;
    box-sizing:border-box;
    -moz-box-sizing:border-box;
}
/*
    The final content.
*/
.tableCell>div>div>div{
    background: lightblue;
    padding: 5px;
    height: 100%;
    box-sizing:border-box;
    -moz-box-sizing:border-box;
}


#col1{
    width: 16.66%;          
}
#col1>div>div{
    padding-right: 10px;
}
#col2{
    width: 25%;         
}
#col2>div>div{
    padding-right: 10px;
}
#col3{      
    width: 16.66%;
}
#col3>div>div{
    padding-right: 10px;
}
#col4{
    width: 41.66%;
}

HTML

<div class="table">
    <div class="tableRow">
        <div id='col1' class="tableCell">   
            <div><div><div>16.66%</div></div></div>
        </div>
        <div id='col2' class="tableCell">
            <div><div><div>25%</div></div></div>
        </div>
        <div id='col3' class="tableCell">
            <div><div><div>16.66%</div></div></div>
        </div>
        <div id='col4' class="tableCell">
            <div><div><div>41.66%</div></div></div>
        </div>  
    </div>
</div>

Diría que es bastante exagerado usando divs adicionales para solo un margen, pero desafortunadamente CSS no tiene un modelo de 'caja de margen', que en realidad resolvería mil millones de problemas.

Esta cantidad de código anidado podría hacerte pensar ' ¿por qué no usar otras técnicas?"ya que eso puede resultar en menos código. Por un deseo muy específico que sería el caso. Sin embargo, otras técnicas a menudo implican flotación o posicionamiento absoluto. Estas técnicas no pueden lograr lo mismo: los flotadores, por ejemplo, pueden lograr columnas que son iguales en longitud, pero cuando quieres un borde o margen te encontrarás en problemas. Para el posicionamiento absoluto es más bien lo contrario: puede resolver el problema del margen, pero la altura solo puede basarse en uno columna.

En mi opinión CSS no ha cumplido con los requisitos. Si bien es necesario sustituir las tablas por posiciones, después de todos estos años todavía no es posible obtener los mismos resultados. Para lograr' el santo grial de los santos griales ' las estructuras de la mesa no son solo la manera más fácil, también hay la única manera... al menos, por lo que sé después de probar cientos de posibilidades.

La pregunta restante es: ¿por qué usar divs si los estás usando como tablas? Este no me entiendo a mí mismo, pero la gente parece tener sus razones para eso.

 2
Author: Kevin Driessen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-03 16:10:44

Uso la cuadrícula de OOCSS para esto

Https://github.com/stubbornella/oocss

Recientemente puse una demostración en línea en mi propio sitio ya que no hay ejemplos adecuados en línea : (

Http://www.leipeshit.com/awesome_stuff/oocss/core/grid/grids_all.html

 1
Author: Benjamin Udink ten Cate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-01 04:14:31

Una forma más fácil de obtener el mismo efecto es dejar que el contenido dentro de sus columnas cree sus canales en lugar de aplicar márgenes/relleno a las columnas mismas. Esto se puede hacer con fijo, fluido, elástico, etc. Grid.

Por ejemplo:

/* Gutters */
h1, h2, h3, h4, h5, h6,
p, ul, ol, blockquote,
hr, address, pre, object, fieldset
{
    margin-right: .75rem;
    margin-left: .75rem;
    padding-right: .75rem;
    padding-left: .75rem;
}

Esto también simplifica el dimensionamiento de las columnas, el anidamiento y la aplicación de fondos a las piezas de lego.

 1
Author: BBQ Brains,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-01 21:53:58

¿Por qué no usar el relleno como en su primer ejemplo y luego establecer box-sizing: border-box en todos los elementos?

 0
Author: Jonas Grumann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-11 09:12:27

Recientemente he desarrollado una solución alternativa para esto que permite cualquier combinación de columnas flexibles dentro de una fila con un margen fijo y consistente en todas las columnas, independientemente del ancho del elemento padre.

Esto no usa ningún JavaScript y funciona en IE8+.

En esta solución, el margen se define en dos clases, por lo que es fácil cambiarlo para diseños responsivos. Los anchos de columna también son representativos del espacio que utilizan, por ejemplo, una columna de 2 la fila tiene anchos de 50% y una fila de 4 columnas tiene anchos de 25%.

Puedes ver un ejemplo en http://www.andrewjamestait.co.uk/conflexgrids /

O está disponible en GitHub en https://github.com/andrewjtait/conflexgrids

 0
Author: Andrew Tait,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-06 11:18:43

Si puede vivir con otro div anidado por columna, podría definir el margen deseado para cada una. Para deshacerse del margen en los bordes exteriores izquierdo y derecho, puede definir un margen negativo en el contenedor exterior.

Ej.: Usando PureCSS pure-g es el contenedor exterior, pure-u-* es un nodo de columna (display: inline-block) que contiene el div anidado. spacing es el nombre de esta extensión personalizada del sistema de cuadrícula PureCSS para permitir márgenes de columna.

.pure-g.spacing {
    margin: 0 -10px;
}

.pure-g.spacing [class *= "pure-u"] > div {
    margin: 10px;
}

Debe trabajar en la mayoría de los navegadores. Dime si no lo hace - ya lo estoy usando.

Saludos, Max

 0
Author: mxg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-15 15:14:02