Bloque de visualización sin ancho del 100%


95

Quiero configurar un elemento span para que aparezca debajo de otro elemento usando la propiedad display. Intenté aplicar inline-block pero sin éxito, y pensé que podría usar block si de alguna manera lograba evitar darle al elemento un ancho del 100% (no quiero que el elemento se "estire"). ¿Se puede hacer esto, o si no, cuál es una buena praxis para resolver este tipo de problemas?

Ejemplo: una lista de noticias donde quiero establecer un enlace "leer más" al final de cada publicación (nota: en <a>lugar de <span>)

<li>
<span class="date">11/15/2012</span>
<span class="title">Lorem ipsum dolor</span>
<a class="read-more">Read more</a> 
</li>


Actualización: resuelto. En CSS, aplique

li {
    clear: both;
}
li a {
    display: block;
    float: left;
    clear: both;
}

1
¿Tiene algún marcado (HTML o CSS) para mostrarnos? Es difícil trabajar en el problema sin nada en lo que realmente trabajar. También una demostración de jsfiddle sería buena.
Tom Oakley

Pensé que no necesitaba ningún código de muestra, ya que solo se trata de colocar un elemento span. Ver publicación actualizada.
Staffan Estberg

Puede reducir seriamente todo ese marcado con solo usar una línea de código como mencioné a continuación.
ha404

Respuestas:


73

Si entiendo su pregunta correctamente, el siguiente CSS lo hará flotar por debajo de los tramos y evitará que tenga un ancho del 100%:

a {
    display: block; 
    float: left; 
    clear: left; 
}

Intenté aplicar esto, pero dado que los elementos del intervalo (título y fecha, en el ejemplo) no tienen flotante, el enlace se coloca antes del último intervalo. Supongo que una solución sería hacer que todos los elementos secundarios del li floten.
Staffan Estberg

Esto funciona si aplico un clearfix para el padre li. Irá con esta solución, gracias PJ.
Staffan Estberg

157

Utilice display: table.

Esta respuesta debe tener al menos 30 caracteres; Ingresé 20, así que aquí hay algunos más.


13
Solución genial. margin: 0 auto;si lo necesita centrado.
Mafia

4
Creo que eres genial.
Billynoah

1
display: table;funciona, pero no acepta ningún relleno.
donquixote

@ ha404 tienes razón, ¡el relleno funciona! jsfiddle.net/wgj7xvLe/4 al menos en mi navegador (Chromium).
donquixote

3
@donquixote debería aceptar el relleno siempre que use border-collapse: separado. acabo de tener ese problema.
Brad

30

puedes usar:

width: max-content;

Nota: el soporte es limitado, consulte aquí para obtener un desglose completo de los navegadores compatibles


¡Nunca había oído hablar de esto! Interesante.
Ryan

Fue bueno desde Chrome 46 y FF 66. Debería aceptarse respuesta. inline-blocket al estaba rompiendo mi diseño.
i336_

1
@ i336_ A día de hoy, todavía no es compatible con el navegador Edge.
ChrisW

¿Edge o Chromium Edge? (Para ser claros; el primero estará en transición durante bastante tiempo ...)
i336_

Según caniuse.com, es compatible con Edge a partir de Edge 79 lanzado el 14 de enero de 2020. En total tiene una calificación de soporte del 92%. caniuse.com/?search=max-content Esta es una buena bienvenida para mí. Cuando escuché sobre él por primera vez hace casi 2 años, no tenía suficiente soporte para que yo lo usara en producción, pero ahora lo tiene.
Xandor

7

Mantendría cada fila en su propio div, así que ...

<div class="row">
    <div class="cell">Content</div>
</div>
<div class="row">
    <div class="cell">Content</div>
</div>

Y luego para el CSS:

.cell{display:inline-block}

Es difícil darle una solución sin ver su código original.


1
Gracias, pero prefiero no mezclar ningún elemento div.
Staffan Estberg

5

Nuevamente: una respuesta que podría ser un poco tarde (pero para aquellos que encuentran esta página para la respuesta de todos modos).

En lugar de display:block;usardisplay:inline-block;


2

Prueba esto:

li a {
    width: 0px;
    white-space:nowrap;
}

1

Tuve este problema, lo resolví así:

.parent {
  white-space: nowrap;
  display: table;
}

.child {
  display: block;
}

el "espacio en blanco: nowrap" se asegura de que los hijos del niño (si tiene alguno) no se ajustan a la nueva línea si no hay suficiente espacio.

sin "espacio en blanco: nowrap":

ingrese la descripción de la imagen aquí

con "espacio en blanco: nowrap":

ingrese la descripción de la imagen aquí


editar: parece que también funciona sin la parte del bloque secundario para mí, así que esto parece funcionar bien.

.parent {
  white-space: nowrap;
  display: table;
}

0

Puede utilizar lo siguiente:

display: inline-block;

Funciona bien en enlaces y otros elementos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.