¿Hay alguna manera de tener un DIV secundario dentro de un DIV contenedor principal que sea más ancho que el primario? El DIV secundario debe tener el mismo ancho de la ventana gráfica del navegador.
Ver ejemplo a continuación:
El DIV hijo debe permanecer como hijo del padre div. Sé que puedo establecer márgenes negativos arbitrarios en el div hijo para hacerlo más ancho, pero no puedo encontrar la manera de hacerlo esencialmente al 100% del ancho del navegador.
Sé que puedo hacerlo:
.child-div{
margin-left: -100px;
margin-right: -100px;
}
Pero necesito que el niño tenga el mismo ancho que el navegador, que es dinámico.
Actualizar
Gracias por sus respuestas, parece que la respuesta más cercana hasta ahora es hacer que la posición DIV secundaria sea absoluta y establecer las propiedades izquierda y derecha en 0.
El siguiente problema que tengo es que el padre tiene position: relative, lo que significa que las propiedades izquierda y derecha siguen siendo relativas al padre div y no al navegador, vea el ejemplo aquí: jsfiddle.net/v2Tja/2
No puedo eliminar la posición relativa del padre sin arruinar todo lo demás.
position: relative
? ¿Para qué necesitasposition: relative
? Supongo que lo que pregunto es: ¿qué intentas hacer?Respuestas:
Usar posicionamiento absoluto
fuente
position:fixed
? ¿Por qué no funciona correctamente?Aquí hay una solución genérica que mantiene el elemento hijo en el flujo de documentos:
Establecemos el
width
elemento secundario para llenar todo el ancho de la ventana gráfica, luego hacemos que coincida con el borde de la pantalla moviéndolo aleft
una distancia de la mitad de la ventana gráfica, menos el 50% del ancho del elemento principal.Manifestación:
El soporte del navegador para vw y para calc () generalmente se puede ver como IE9 y más reciente.
Nota: Esto supone que el modelo de caja está configurado en
border-box
. Sin estoborder-box
, también tendrías que restar los rellenos y bordes, haciendo que esta solución sea un desastre.Nota: Se recomienda ocultar el desbordamiento horizontal de su contenedor de desplazamiento, ya que ciertos navegadores pueden optar por mostrar una barra de desplazamiento horizontal a pesar de que no haya desbordamiento.
fuente
position: relative
padre!He buscado por todas partes una solución a este problema durante mucho tiempo. Idealmente, queremos que el hijo sea más grande que el padre, pero sin conocer de antemano las limitaciones del padre.
Y finalmente encontré una brillante respuesta genérica aquí . Copiándolo literalmente:
fuente
90vw
. Además, parece quemargin-right
no tiene ningún efecto en ningún caso.Basado en su sugerencia original (configuración de márgenes negativos), he intentado encontrar un método similar usando unidades de porcentaje para el ancho dinámico del navegador:
HTML
CSS:
Los márgenes negativos permitirán que el contenido fluya fuera de la DIV principal. Por lo tanto, configuré
padding: 0 100%;
para que el contenido vuelva a los límites originales del Chlid DIV.Los márgenes negativos también harán que el ancho total de .child-div se expanda fuera de la ventana del navegador, lo que resulta en un desplazamiento horizontal. Por lo tanto, debemos recortar el ancho de extrusión aplicando un
overflow-x: hidden
a un DIV de abuelo (que es el padre de la División de padres):Aquí está el JSfiddle
Había intentado con Nils Kaspersson
left: calc(-50vw + 50%)
; funcionó perfectamente bien en Chrome y FF (aún no estoy seguro sobre IE) hasta que descubrí que los navegadores Safari no lo hacen correctamente. Espero que hayan solucionado esto pronto, ya que en realidad me gusta este método simple.Esto también puede resolver su problema donde el elemento DIV principal debe ser
position:relative
Los 2 inconvenientes de este método de solución alternativa son:
Avíseme si hay algún problema con este método;). Espero eso ayude.
fuente
Flexbox se puede usar para hacer que un niño sea más ancho que su padre con tres líneas de CSS.
Solo el niño
display
,margin-left
ywidth
necesita ser configurado.margin-left
Depende del niñowidth
. La formula es:Las variables CSS se pueden usar para evitar calcular manualmente el margen izquierdo.
Demo # 1: Cálculo manual
Demostración n. ° 2: uso de variables CSS
fuente
Usé esto:
HTML
CSS
fuente
Puedes probar posición: absoluta. y dar ancho y alto, arriba: 'eje y desde arriba' e izquierda: 'eje x'
fuente
Tuve un problema similar Se suponía que el contenido del elemento secundario debía permanecer en el elemento primario mientras que el fondo tenía que extender el ancho completo de la ventana gráfica.
Resolví este problema creando el elemento hijo
position: relative
y agregando un pseudo elemento (:before
) con élposition: absolute; top: 0; bottom: 0; width: 4000px; left: -1000px;
. El pseudo elemento permanece detrás del elemento secundario real como un pseudo elemento de fondo. Esto funciona en todos los navegadores (incluso IE8 + y Safari 6+, no tienen la posibilidad de probar versiones anteriores).Pequeño ejemplo de violín: http://jsfiddle.net/vccv39j9/
fuente
overflow-x: hidden
.Agregando a la solución de Nils Kaspersson, también estoy resolviendo el ancho de la barra de desplazamiento vertical. Estoy usando
16px
como ejemplo, que se resta del ancho del puerto de vista. Esto evitará que aparezca la barra de desplazamiento horizontal.fuente
16px
que lo que necesita restar porque está causando que la barra de desplazamiento horizontal sea el margen / relleno predeterminado del navegador, en lugar de restarlo, solo use esto, porhtml, body{ margin:0; padding:0 }
lo que no necesitará hacer cálculos adicionales para el16px
Suponiendo que el padre tiene un ancho fijo, por ejemplo,
#page { width: 1000px; }
y está centrado#page { margin: auto; }
, desea que el niño se ajuste al ancho de la ventana del navegador que simplemente puede hacer:fuente
Para que el elemento secundario sea tan ancho como el contenido, intente esto:
fuente
fuente
Sé que esto es viejo, pero para cualquiera que venga a esto por una respuesta, lo haría así:
Desbordamiento oculto en un elemento que contiene el elemento padre, como el cuerpo.
Dele a su elemento hijo un ancho mucho más ancho que su página y colóquelo a la izquierda absoluta en -100%.
Aquí hay un ejemplo:
También aquí hay un JS Fiddle: http://jsfiddle.net/v2Tja/288/
fuente
Entonces la solución será la siguiente.
HTML
CSS
fuente
Probé algunas de tus soluciones. Éste :
es, con mucho, el mejor, ya que no necesitamos CSS adicional para pantallas más pequeñas. Hice un codePen para mostrar los resultados: utilicé un div padre con una imagen de fondo y un divon div con contenido interno.
https://codepen.io/yuyazz/pen/BaoqBBq
fuente