2011-05-02 15 views
11

Tengo un componente del lado del servidor que genera una "barra de herramientas" de diseño fluido usando DIV sin ancho fijo, generando muchos A dentro de él.¿Cómo hacer que los niños ajusten automáticamente el ancho de los padres solo con CSS?

Luego necesito personalizar ese diseño para que todas las etiquetas A se ajusten automáticamente al ancho principal. Pero la cantidad de hijos es variable y no se conoce el ancho de los padres (se ajusta automáticamente a la ventana).

hice algunas pruebas con este violín: http://jsfiddle.net/ErickPetru/6nSEj/1/

pero no puedo encontrar una manera de hacerlo dinámico (descomentar la última A etiqueta para ver cómo se ins't de trabajo, lol).

No puedo cambiar las fuentes del lado del servidor para gerar HTML con ancho fijo. Y realmente me gustaría resolverlo solo con CSS si hay alguna manera, incluso con JavaScript que podría lograr ese resultado.

¿Cómo puedo hacer que todos los niños se ajusten automáticamente al ancho de los padres independientemente del número de hijos?

+0

estoy bastante seguro de que esto no puede hacerse estrictamente con CSS, por lo que (si no me equivoco) que tienes que espolvorear un poco de JavaScript. –

+0

Ese era mi miedo. Quizás CSS3 y HTML5 podrían hacer algo ... ¿O no? –

+0

Si está dispuesto a dejar de admitir IE7, hágalo con CSS fácilmente. [¿Te importa IE7?] (Http://gs.statcounter.com/#browser_version-ww-monthly-201004-201104) Una buena idea es hacer mi opción mágica, con una solución de JavaScript para <= IE7 – thirtydot

Respuesta

2

Esto ya es una vieja pregunta. A pesar de que las respuestas dadas asistieron bien en el momento, hoy en día el Flexible Box Layout ofrece el mismo resultado con mucha más simplicidad, con good support en todos los navegadores modernos. ¡Lo recomiendo encarecidamente!

/* Important parts */ 
 
.parent { 
 
    display: flex; 
 
} 
 

 
.parent a { 
 
    flex: 1; 
 
} 
 

 
/* Decoration */ 
 
.parent { 
 
    padding: 8px; 
 
    border: 1px solid #ccc; 
 
    background: #ededed; 
 
} 
 

 
.parent a { 
 
    line-height: 26px; 
 
    text-align: center; 
 
    text-decoration: none; 
 
    border: 1px solid #ccc; 
 
    background: #dbdbdb; 
 
    color: #111; 
 
}
<div class="parent"> 
 
    <a href="#">Some</a> 
 
    <a href="#">Other</a> 
 
    <a href="#">Any</a> 
 
</div> 
 

 
<br> 
 

 
<div class="parent"> 
 
    <a href="#">Some</a> 
 
    <a href="#">Other</a> 
 
    <a href="#">Any</a> 
 
    <a href="#">One More</a> 
 
    <a href="#">Last</a> 
 
</div>

1

Por ahora, muchos usan jQuery como solución a este problema. Todo lo que necesitas es una línea. Esto es de tu violín.

$("div.parent a").css("width", (($("div.parent").width()/$("div.parent a").length) -2) + "px"); 
+0

Esto no funcionará bien para cambiar el tamaño. – Marcel

13

Puede utilizar display: table-cell:

Ver:http://jsfiddle.net/6nSEj/12/(or with 5 children)

Esto no funcionará en Internet Explorer 7, ya que el navegador simplemente no soporta display: table y amigos.

div.parent { 
    .. 
    width: 100%; 
    display: table; 
    table-layout: fixed; 
} 
div.parent a { 
    .. 
    display: table-cell; 
} 
+3

Ahora que IE7 tiene menos del 4% de cuota de mercado (al menos aquí en mi país), creo que es la mejor opción, ya que resuelve el problema solo con CSS. –

+0

@thirtydot ¡Amigo, esta es una solución épica! Extremadamente útil en muchos casos. ¡Gracias! – Mahdi

Cuestiones relacionadas