Felipe
no puedo conseguir padding-bottom
para trabajar cuando uso overflow-y: auto
en una caja Yo uso Firefox.
#container {
padding: 3em;
overflow-x: hidden;
overflow-y: auto;
width: 300px;
height: 300px;
background: red;
}
#some_info {
height: 900px;
background: #000;
}
<div id="container">
<div id="some_info"></div>
</div>
Ver el JSFiddle.
Una solución más sin DIV adicionales.
#container:after {
content: "";
display: block;
height: 50px;
width: 100%;
}
Trabajando en FF, Chrome, IE8-10.
-
¿Alguna forma de hacer que funcione para el lado derecho? En Firefox, el desplazamiento horizontal termina cuando el contenido está justo en el borde del cuadro e ignora el relleno adicional.
– Nick
12 de febrero de 2017 a las 19:46
-
Si no le importaría explicar, ¿por qué los 50px? ¿Es este valor específico para el css en la pregunta o podría funcionar para cualquiera?
– Ethan
28 de agosto de 2017 a las 8:55
-
@Booligoosh, 50px es el tamaño del “relleno”. Para ser más precisos, debería ser 3em para reflejar el ejemplo dentro de la pregunta.
– esHristov
30 de agosto de 2017 a las 7:30
-
@isHristov, según tengo entendido, ¿50px es solo un valor de demostración?
– Ethan
30 de agosto de 2017 a las 11:05
-
Esto funciona solo si elimina el relleno inferior de #container; de lo contrario, obtiene un relleno inferior doble en Chrome.
– kol
24 de febrero de 2019 a las 12:35
Llegué tarde a la fiesta, pero pensé que valía la pena agregar una solución diferente que aborde algunas de las inquietudes planteadas anteriormente.
Vine aquí exactamente por el tipo de situación que planteó @Philip en respuesta a la solución de Alexandre Lavoie: tengo contenido generado dinámicamente dentro del contenedor, por lo que no puedo simplemente aplicar estilo a un nombre div específico como #some_info
.
Afortunadamente, existe una solución simple para los navegadores que admiten CSS3: en lugar de aplicar relleno inferior al contenedor, aplique un margen inferior al último elemento secundario dentro del contenedor.
#container > :last-child {
margin-bottom: 3em;
}
Siempre que el último elemento secundario en el contenedor div sea un elemento de nivel de bloque, esto debería funcionar.
MANIFESTACIÓN: http://jsfiddle.net/rwgZu/240/
PD Si la falla de Firefox para desplazarse hasta la parte inferior del relleno es realmente un error (como lo sugiere @Kyle), todavía no se ha solucionado a partir de Firefox 47.0. ¡Frustrante! Internet Explorer 11.0.9600.17843 exhibe el mismo comportamiento. (Google Chrome, por el contrario, muestra el relleno inferior como se esperaba).
-
Sí, todavía parece un error abierto: bugzilla.mozilla.org/show_bug.cgi?id=748518
– Kevlarr
14 de julio de 2020 a las 2:59
-
No funciona en FireFox 89.0.2 – todavía no respeta el margen inferior
– TetraDev
30 de junio de 2021 a las 23:16
Las soluciones anteriores no funcionaban para mis necesidades, y creo que encontré una solución simple.
Si su contenedor y el contenido desbordado comparten el mismo color de fondo, puede agregue un borde superior e inferior con el color que coincida con el color de fondo. Para crear un relleno igual alrededor, establezca el ancho del borde igual al relleno izquierdo y derecho del contenedor.
Enlace a la versión modificada del violín de OP: http://jsfiddle.net/dennisoneil/rwgZu/508/
Un ejemplo simple a continuación.
Nota: Stack Overflow pone los resultados del fragmento en un pergamino de desbordamiento, lo que hace que sea un poco más difícil ver lo que está pasando. El violín puede ser su mejor opción de vista previa.
#container {
background: #ccc;
overflow-y: scroll;
height: 190px;
padding: 0 20px;
border-top: 20px solid #ccc;
border-bottom: 20px solid #ccc;
}
#overflowing {
background: #ccc;
}
<div id="container">
<div id="overflowing">
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
This is content<br/>
</div>
</div>
-
Este tipo de obras, pero termina empujando la barra de desplazamiento hacia arriba desde la parte inferior por la cantidad de espesor del borde. Entonces se ve raro.
– TetraDev
30 de junio de 2021 a las 23:21
Aquí hay un posible enfoque que funciona perfectamente:
#container {
overflow-x: hidden;
overflow-y: auto;
width: 300px;
height: 300px;
}
#some_info {
height: 900px;
background: #000;
border: 3em solid red;
}
Diseñe el div principal normalmente y haga que el div interno haga lo que usted quiere que haga.
Remover overflow-x
y overflow
en #container
cambio height
a 100%
y añadir overflow-y:scroll;
en #some_info
#container {
padding: 3em;
width: 300px;
height: 300px;
background: red;
}
#some_info {
height: 100%;
background: #000;
overflow-y:scroll;
width:100%;
}
Demostración de trabajo: http://jsfiddle.net/9yuohxuh/
fredrivett
Para aquellos que buscan una solución simple y pueden cambiar el DOM, pongan el overflow
en el elemento exterior y el padding
en el elemento interior.
.scroll {
overflow-x: hidden;
overflow-y: auto;
}
.scroll__inner {
padding: 3em;
}
En el ejemplo de la pregunta original, se vería así:
#container {
overflow-x: hidden;
overflow-y: auto;
width: 300px;
height: 300px;
background: red;
}
#some_info {
height: 900px;
background: #000;
padding: 3em;
box-sizing: border-box; /* only needed if wanting padding to not be added to height */
}
Nótese el uso de box-sizing: border-box
aquí, que solo es necesario ya que el OP tiene una altura codificada (generalmente una mala práctica, pero podría ser necesaria en casos extremos), por lo que agregar esto border-box
habilita el 3em
acolchado para no aumentar la altura, sino almohadilla dentro del 900px
.
Una nota final, recomendaría evitar las identificaciones para diseñar, principalmente debido a su especificidad extremadamente alta, ver esta publicación para más información sobre eso.
Rohit Azad Malik
Hola, ahora estoy acostumbrado a este css.
#container {
padding: 3em;
overflow-x: hidden;
overflow-y: auto;
width: 300px;
height: 300px;
background: red;
padding-bottom:0; // add this line in your css
}
#some_info {
height: 900px;
background: #000;
margin-bottom:3em; // add this line in your css
}
-
Esto funciona porque no hay contenido. Cuando agrega contenido, se superpone a todo lo que hay allí, ¡incluso al relleno! Cualquier borde, margen u otro contenedor uniforme sin contenido se colapsa dentro del div de desplazamiento (al menos en Chrome 43)
– sergio
04/07/2015 a las 20:45
-
No funciona si usas
height: 100vh
que es mi caso.– alejnavab
7 oct 2016 a las 18:49
Veo incluso relleno (rojo) alrededor de todos los bordes.
– Grant Thomas
20 de noviembre de 2012 a las 11:09
AHa, ¿tal vez es solo Firefox?
– Felipe
20 de noviembre de 2012 a las 11:12
Confirmo el problema en FF17
– Alejandro Lavoie
20 de noviembre de 2012 a las 11:13
W3C tiene que resolver este problema, ¡con suerte elegirán el comportamiento de Chrome! github.com/w3c/csswg-drafts/issues/129
– Tobías Buschor
18 de noviembre de 2017 a las 5:24
¿Se solucionó este problema ahora? Estoy usando Windows y Chrome 92.0.4515.159, probé el violín y
padding-bottom
funciona como se esperaba–Kevin Chandra
18 de agosto de 2021 a las 11:20