Quiero tener una fila de divs (celdas) que no se ajusten si el navegador es demasiado estrecho para adaptarse a ellos.
Busqué en Stack y no pude encontrar una respuesta funcional a lo que creo que debería ser una simple pregunta CSS.
Las celdas tienen un ancho especificado. Sin embargo, no quiero especificar el ancho de la fila, el ancho debería ser automáticamente el ancho de sus celdas secundarias.
Si la ventana gráfica es demasiado estrecha para acomodar las filas, entonces el div debería desbordarse con barras de desplazamiento.
Proporcione su respuesta como un fragmento de código de trabajo, ya que probé muchas de las soluciones que he visto en otros lugares (como especificar ancho: 100% y no parecen funcionar).
Estoy buscando una solución solo HTML / CSS, sin JavaScript.
.row {
float: left;
border: 1px solid yellow;
width: 100%;
overflow: auto;
}
.cell {
float: left;
border: 1px solid red;
width: 200px;
height: 100px;
}
<div class="row">
<div class="cell">a</div>
<div class="cell">b</div>
<div class="cell">c</div>
</div>
Por el momento, estoy codificando el ancho de la fila en un número realmente grande.
Respuestas:
La propiedad CSS
display: inline-block
se diseñó para abordar esta necesidad. Puede leer un poco sobre esto aquí: http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/A continuación se muestra un ejemplo de su uso. Los elementos clave son que el
row
elemento tienewhite-space: nowrap
y loscell
elementos tienendisplay: inline-block
. Este ejemplo debería funcionar en la mayoría de los navegadores principales; una tabla de compatibilidad está disponible aquí: http://caniuse.com/#feat=inline-block<html> <body> <style> .row { float:left; border: 1px solid yellow; width: 100%; overflow: auto; white-space: nowrap; } .cell { display: inline-block; border: 1px solid red; width: 200px; height: 100px; } </style> <div class="row"> <div class="cell">a</div> <div class="cell">b</div> <div class="cell">c</div> </div> </body> </html>
fuente
<!DOCTYPE html>
o<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
al principio del HTML para que IE no esté predeterminado en el modo peculiar.float: right
, ¿verdad?Desea definir una
min-width
fila para que cuando se cambie el tamaño del navegador no vaya por debajo de eso y se ajuste.fuente
Después de leer la respuesta de John, descubrí que lo siguiente parecía funcionar para nosotros (no requería especificar el ancho):
<style> .row { float:left; border: 1px solid yellow; overflow: visible; white-space: nowrap; } .cell { display: inline-block; border: 1px solid red; height: 100px; } </style> <div class="row"> <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div> <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div> <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div> </div>
fuente
overflow: visible; white-space: nowrap;
hizo el truco para mí. ¡Gracias!La única forma en que me las he arreglado para hacer esto es usando
overflow: visible;
ywidth: 20000px;
en el elemento padre. No hay forma de hacer esto con el nivel 1 de CSS que yo sepa y me negué a pensar que tendría que ir todo entusiasmado con el nivel 3 de CSS. El siguiente ejemplo tiene 18 menús que se extienden más allá de mi pantalla LCD de resolución de 1920x1200 , si su pantalla es más grande, simplemente duplique los elementos del menú de primer nivel o simplemente cambie el tamaño del navegador. Alternativamente, y con niveles ligeramente más bajos de compatibilidad del navegador, puede utilizar consultas de medios CSS3.Aquí hay una demostración de ejemplo de copiar / pegar completa ...
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>XHTML5 Menu Demonstration</title> <style type="text/css"> * {border: 0; box-sizing: content-box; color: #f0f; font-size: 10px; margin: 0; padding: 0; transition-property: background-color, background-image, border, box-shadow, color, float, opacity, text-align, text-shadow; transition-duration: 0.5s; white-space: nowrap;} a:link {color: #79b; text-decoration: none;} a:visited {color: #579;} a:focus, a:hover {color: #fff; text-decoration: underline;} body {background-color: #444; overflow-x: hidden;} body > header {background-color: #000; height: 64px; left: 0; position: absolute; right: 0; z-index: 2;} body > header > nav {height: 32px; margin-left: 16px;} body > header > nav a {font-size: 24px;} main {border-color: transparent; border-style: solid; border-width: 64px 0 0; bottom: 0px; left: 0; overflow-x: hidden !important; overflow-y: auto; position: absolute; right: 0; top: 0; z-index: 1;} main > * > * {background-color: #000;} main > section {float: left; margin-top: 16px; width: 100%;} nav[id='menu'] {overflow: visible; width: 20000px;} nav[id='menu'] > ul {height: 32px;} nav[id='menu'] > ul > li {float: left; width: 140px;} nav[id='menu'] > ul > li > ul {background-color: rgba(0, 0, 0, 0.8); display: none; margin-left: -50px; width: 240px;} nav[id='menu'] a {display: block; height: 32px; line-height: 32px; text-align: center; white-space: nowrap;} nav[id='menu'] > ul {float: left; list-style:none;} nav[id='menu'] ul li:hover ul {display: block;} p, p *, span, span * {color: #fff;} p {font-size: 20px; margin: 0 14px 0 14px; padding-bottom: 14px; text-indent: 1.5em;} .hidden {display: none;} .width_100 {width: 100%;} </style> </head> <body> <main> <section style="height: 2000px;"><p>Hover the first menu at the top-left.</p></section> </main> <header> <nav id="location"><a href="">Example</a><span> - </span><a href="">Blog</a><span> - </span><a href="">Browser Market Share</a></nav> <nav id="menu"> <ul> <li><a href="" tabindex="2">Menu 1 - Hover</a> <ul> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> </ul> </li> <li><a href="" tabindex="2">Menu 2</a></li> <li><a href="" tabindex="2">Menu 3</a></li> <li><a href="" tabindex="2">Menu 4</a></li> <li><a href="" tabindex="2">Menu 5</a></li> <li><a href="" tabindex="2">Menu 6</a></li> <li><a href="" tabindex="2">Menu 7</a></li> <li><a href="" tabindex="2">Menu 8</a></li> <li><a href="" tabindex="2">Menu 9</a></li> <li><a href="" tabindex="2">Menu 10</a></li> <li><a href="" tabindex="2">Menu 11</a></li> <li><a href="" tabindex="2">Menu 12</a></li> <li><a href="" tabindex="2">Menu 13</a></li> <li><a href="" tabindex="2">Menu 14</a></li> <li><a href="" tabindex="2">Menu 15</a></li> <li><a href="" tabindex="2">Menu 16</a></li> <li><a href="" tabindex="2">Menu 17</a></li> <li><a href="" tabindex="2">Menu 18</a></li> </ul> </nav> </header> </body> </html>
fuente
width:100%
porwidth:1000px
ella, funciona para míwhite-space: nowrap;
y los niñosdisplay: inline-block;
como ya se dijo en otras respuestas (o vuelva adisplay: table;
ydisplay: table-cell;
).main > * > * {background-color: #000;}
O_oPara mí (usando bootstrap), lo único que funcionó fue la configuración
display:absolute;z-index:1
en la última celda.fuente
display:absolute
no es CSS válidoTuve un problema algo similar en el que un área delimitada consistía en una imagen en un flotador: bloque izquierdo y un bloque de texto no flotante. El área tiene un ancho fluido. El texto, por diseño, se envolvería en el lado derecho de la imagen. El problema era que el texto comenzaba con una etiqueta <h2>, cuya primera palabra es la palabra diminuta "De". Cuando cambié el tamaño de la ventana a un ancho menor, el texto no flotante dejaría, para un cierto rango de anchos, solo la palabra "De" en la parte superior del área de ajuste, el resto del texto se comprimió debajo del flotante. bloquear. Mi solución fue agrandar la primera palabra de la etiqueta, reemplazando el espacio que le seguía con este código, <span style = "opacity: 0;"> x </span>. El efecto fue hacer la primera palabra, en lugar de "From", "FromxNextWord", donde la "x", al ser invisible, parecía un espacio. Ahora mi primera palabra fue lo suficientemente grande como para no ser abandonada por el resto del bloque de texto.
fuente