¿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 dedivsopa) 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: 100pxconoverflow: hiddenon.right?EDITAR: Aquí hay dos espejos para el enlace (muerto) anterior:
fuente
box-sizing: border-boxen eldivs. Solo una suposición, ya que no proporcionó una demostración que muestre el comportamiento que describe. Dicho esto, ladisplay: tablesolució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: 1lugar dewidth: 100%?flex: 1es la abreviatura deflex-grow: 1. Es un atributo de combinación:flex: <grow> <shrink> <basis>.flexbugssabes.Compatible con navegadores modernos comunes (IE 8+): http://jsfiddle.net/m5Xz2/3/
fuente
display:table.inline-blockrellenar 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-growpropiedad para lograr este objetivo. Vas a tener que conjuntodisplay: flexde contenedor primario, entonces usted necesidad de fijarflex-grow: 1para el bloque que desea rellenar el espacio restante, o simplementeflex: 1como 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