¿Es posible usar CSS y dos etiquetas DIV de bloque en línea (o lo que sea) en lugar de usar una tabla?
La versión de la tabla es esta (se agregaron bordes para que pueda verla):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table style="width:100%;">
<tr>
<td style="border:1px solid black;width:100px;height:10px;"></td>
<td style="border:1px solid black;height:10px;"></td>
</tr>
</table>
</body>
</html>
Produce una columna izquierda con un ANCHO FIJO (no un ancho porcentual) y una columna derecha que se expande para llenar EL ESPACIO RESTANTE en la línea. Suena bastante simple, ¿verdad? Además, dado que nada está "flotando", la altura del contenedor principal se expande adecuadamente para abarcar la altura del contenido.
- COMIENCE RANT--
He visto las implementaciones de "solución clara" y "santo grial" para diseños de varias columnas con columna lateral de ancho fijo, y apestan y son complicadas. Invierten el orden de los elementos, usan anchos porcentuales o flotadores, márgenes negativos y la relación entre los atributos "izquierdo", "derecho" y "margen" es compleja. Además, los diseños son sensibles a los subpíxeles, por lo que agregar incluso un solo píxel de bordes, relleno o márgenes romperá todo el diseño y enviará columnas completas a la siguiente línea. Por ejemplo, los errores de redondeo son un problema incluso si intenta hacer algo simple, como poner 4 elementos en una línea, con el ancho de cada uno establecido en 25%.
--END RANT--
Intenté usar "inline-block" y "white-space: nowrap;", pero el problema es que simplemente no puedo obtener el segundo elemento para llenar el espacio restante en la línea. Establecer el ancho en algo como "ancho: 100% - (LeftColumWidth) px" funcionará en algunos casos, pero realizar un cálculo en una propiedad de ancho no es realmente compatible.
fuente
display: table-*
construcción que funcione, pero tampoco es realmente "más semántica" (siendo un terrible caso dediv
sopa) y rompe la compatibilidad con IE6. Personalmente me quedaría con el<table>
, a menos que alguien logre tener una idea simple y genial que funcione sinRespuestas:
Ver: http://jsfiddle.net/qx32C/36/
¿Por qué lo reemplacé
margin-left: 100px
conoverflow: hidden
on.right
?EDITAR: Aquí hay dos espejos para el enlace (muerto) anterior:
fuente
box-sizing: border-box
en eldiv
s. Solo una suposición, ya que no proporcionó una demostración que muestre el comportamiento que describe. Dicho esto, ladisplay: table
solución basada en la mayoría de las veces es mejor . Esta es una pregunta muy antigua, pero creo que estaba tratando de evitar algo relacionado con las tablas en esta pregunta debido al comportamiento de OP.Una solución moderna con flexbox:
http://jsfiddle.net/m5Xz2/100/
fuente
flex: 1
lugar dewidth: 100%
?flex: 1
es la abreviatura deflex-grow: 1
. Es un atributo de combinación:flex: <grow> <shrink> <basis>
.flexbugs
sabes.Compatible con navegadores modernos comunes (IE 8+): http://jsfiddle.net/m5Xz2/3/
fuente
display:table
.inline-block
rellenar el resto de la línea.Puede usar calc (100% - 100px) en el elemento fluido, junto con display: inline-block para ambos elementos.
Tenga en cuenta que no debe haber espacio entre las etiquetas, de lo contrario, también tendrá que considerar ese espacio en su cal.
Ejemplo rápido: http://jsfiddle.net/dw689mt4/1/
fuente
He usado la
flex-grow
propiedad para lograr este objetivo. Vas a tener que conjuntodisplay: flex
de contenedor primario, entonces usted necesidad de fijarflex-grow: 1
para el bloque que desea rellenar el espacio restante, o simplementeflex: 1
como Tanius mencionado en los comentarios.fuente
Si no puede usar
overflow: hidden
(porque no quiereoverflow: hidden
) o si no le gustan los hacks / soluciones alternativas de CSS, puede usar JavaScript en su lugar. Tenga en cuenta que puede no funcionar tan bien porque es JavaScript.http://jsfiddle.net/ys2eogxm/
fuente
Cuando abandonas los bloques en línea
http://jsfiddle.net/RXrvZ/3731/
(desde CSS Float: flotando una imagen a la izquierda del texto )
fuente