2010-08-05 28 views
77

Esta es mi caso sistema de rejilla 960:Cómo hacer un div vacías ocupan espacio

<div class="kundregister_grid_full"> 
    <div class="kundregister_grid_1">ID</div> 
    <div class="kundregister_grid_1">Namn</div> 
    <div class="kundregister_grid_1">Anv.Namn</div> 
    <div class="kundregister_grid_1">Email</div> 
    <div class="kundregister_grid_1">Roll</div> 
    <div class="kundregister_grid_1">Aktiv</div> 
</div> 

Ésta es mi conjunto de divs, usado como una estructura de tabla.

CSS dice lo siguiente:

.kundregister_grid_1 { 
    display: inline-block; 
    float: left; 
    margin: 0; 
    text-align: center; 
} 
.kundregister_grid_1 { 
    width: 140px; 
} 

no les importa la denominación sueca. Quiero que los divs se muestren aunque no tengan valores.

<div class="kundregister_grid_full"> 
<div class="kundregister_grid_1">ID</div> 
<div class="kundregister_grid_1"></div> 
<div class="kundregister_grid_1"></div> 
<div class="kundregister_grid_1">Email</div> 
<div class="kundregister_grid_1">Roll</div> 
<div class="kundregister_grid_1">Aktiv</div> 
</div> 

Al igual que, en este caso no hay 'NAMN' y 'Avn.Namn' en las dos columnas. Sin embargo, al ejecutar esto en chrome, se eliminan y ya no presionan los otros divs en el orden float:left. Entonces, si tengo categorías en los mismos divs anteriores, los valores se colocarán en la categoría incorrecta.

Respuesta

46

funciona si elimina flotante. http://jsbin.com/izoca/2/edit

con flotadores que sólo funciona si tener algún contenido, por ejemplo, &nbsp;

+5

Otra respuesta dice que poner en min-height hará que funcione cuando flote, y ciertamente en mi propio caso eso funcionó. Si eso es siempre cierto (ahora, en 2016), entonces esta respuesta es incorrecta. Puedes agregar min-height: 1px; al ancho: 140px; sin la necesidad de eliminar el flotador o agregar contenido. –

+7

El truco 'min-height: 1px;' funcionó para mí también. – Pete

+0

Intentó 'element.text ("   ");' en jQuery y ' ' aparece en la página. – Lori

44

Trate de añadir &nbsp; a los artículos vacíos.

No entiendo por qué no está usando un <table> aquí, sin embargo? Harán este tipo de cosas automáticamente.

+8

De acuerdo. Si se trata de datos tabulares, use una tabla; para eso están. –

+3

Después de todo este tiempo, la gente aún asume '

' == MALA. – saluce

+4

El uso de ' ', como solución popular como es, puede causar problemas en algunos escenarios. Al igual que cuando tacha texto ('text-decoration: line-through;') el trazo se mostrará sobre ' ', mientras que lo que realmente quieres es solo un div en blanco. – Izhaki

1

con el uso de la inline-block se comportará como un objeto en línea. por lo que no se necesitaban flotadores para colocarlos uno al lado del otro en una línea. Y de hecho, como dijo Rito, las carrozas necesitan un "cuerpo", como si necesitaran dimensiones.

estoy totalmente de acuerdo con Pekka sobre el uso de tablas. Todos los que construyen diseños usando div evitan tablas como si fuera una enfermedad. ¡Pero úsalos para datos tablulares! Para eso están destinados. Y en su caso creo que ellos :)

necesita, pero si realmente quieres lo que quieres. Hay una manera de hack css. Igual que el hack flotante.

.kundregister_grid_1:after { content: "."; } 

Añadir que uno y también está listo: D (Nota: no funciona en IE, pero esto es corregible)

1

¿Por qué no añadir "min-width" a su clase css ?

+0

No funciona en FF .. –

19

Ligera actualización a @ no1cobla answer. Esto oculta el período. Esta solución funciona en IE8 +.

.class:after 
{ 
    content: '.'; 
    visibility: hidden; 
} 
+2

Si desea utilizar esto como una alternativa para trabajar solo cuando el elemento está vacío agrega algo como: '.class: after: empty' –

1

Si necesitan ser flotado, siempre se puede simplemente ajustar la altura min-1px por lo que no se colapsan.

18

Una solución sencilla para vacío flotaron divs es añadir:

  • anchura (o min-width)
  • min-altura

esta manera se puede mantener la funcionalidad de flotador y obligarlo a llenar el espacio cuando esté vacío.

Utilizo esta técnica en columnas de diseño de página para mantener cada columna en su posición incluso si las otras columnas están vacías.

Ejemplo:

.left-column 
{ 
    width: 200px; 
    min-height: 1px; 
    float: left; 
} 

.right-column 
{ 
    width: 500px; 
    min-height: 1px; 
    float: left; 
} 
+1

Este funciona perfecto para mi caso. Gracias. – Lavande

+3

'min-height' es la mejor solución – Vall3y

+0

El min-height ** only ** soluciona el problema con' width'. Sin embargo, no evita que div tenga altura cero. (Intenta configurar el fondo div para ver el problema). Por lo tanto,   es una solución más general. También el contenido: "." arregla el problema de altura cero. –

2

  obras pero que no es manera correcta Creo que el w min-altura: 1px;

3

Esta es una manera:

.your-selector:empty::after { 
    content: "."; 
    visibility: hidden; 
} 
+1

recomiendo 'content:" \ 200b ";' para un [espacio de ancho cero] (http://www.fileformat.info/ info/unicode/char/200b/index.htm). Una ventaja adicional es que el navegador no seleccionará este carácter (por ejemplo, 'CTRL + A'' CTRL + C' se comportará igual). – YoYoYonnY

0

En la construcción de un conjunto personalizado de etiquetas de diseño, he encontrado otra respuesta a este problema. Aquí se proporciona el conjunto personalizado de etiquetas y sus clases de CSS.

HTML

<layout-table> 
    <layout-header> 
     <layout-column> 1 a</layout-column> 
     <layout-column> </layout-column> 
     <layout-column> 3 </layout-column> 
     <layout-column> 4 </layout-column> 
    </layout-header> 

    <layout-row> 
     <layout-column> a </layout-column> 
     <layout-column> a 1</layout-column> 
     <layout-column> a </layout-column> 
     <layout-column> a </layout-column> 
    </layout-row> 

    <layout-footer> 
     <layout-column> 1 </layout-column> 
     <layout-column> </layout-column> 
     <layout-column> 3 b</layout-column> 
     <layout-column> 4 </layout-column> 
    </layout-footer> 
</layout-table> 

CSS

layout-table 
{ 
    display : table; 
    clear : both; 
    table-layout : fixed; 
    width : 100%; 
} 

layout-table:unresolved 
{ 
    color : red; 
    border: 1px blue solid; 
    empty-cells : show; 
} 

layout-header, layout-footer, layout-row 
{ 
    display : table-row; 
    clear : both; 
    empty-cells : show; 
    width : 100%; 
} 

layout-column 
{ 
    display : table-column; 
    float : left; 
    width : 25%; 
    min-width : 25%; 
    empty-cells : show; 
    box-sizing: border-box; 
    /* border: 1px solid white; */ 
    padding : 1px 1px 1px 1px; 
} 

layout-row:nth-child(even) 
{ 
    background-color : lightblue; 
} 

layout-row:hover 
{ background-color: #f5f5f5 } 

La clave aquí es la caja de dimensionamiento y el relleno.

9

sólo tiene que añadir un carácter de espacio de anchura cero dentro de un elemento seudo

.class:after { 
    content: '\200b'; 
} 
1

Puede:

Conjunto de .kundregister_grid_1:

  • width (o width-min) con height (o min-height)
  • o padding-top
  • o padding-bottom
  • o border-top
  • o border-bottom

O utilizar pseudo-elementos: ::before o ::after con:

  • {content: "\200B";}
  • o {content: "."; visibility: hidden;}.

O ponga &nbsp; dentro del elemento vacío, pero esto a veces puede traer efectos inesperados, por ej. en combinación con text-decoration: underline;

Cuestiones relacionadas