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.