Estoy tratando de solucionar un problema div
para que siempre se quede en la parte superior de la pantalla, usando:
position: fixed;
top: 0px;
right: 0px;
Sin embargo, div
está dentro de un contenedor centrado. Cuando lo uso position:fixed
, corrige el div
relativo a la ventana del navegador, como está en el lado derecho del navegador. En cambio, se debe arreglar en relación con el contenedor.
Sé que position:absolute
se puede usar para arreglar un elemento relativo al div
, pero cuando se desplaza hacia abajo en la página, el elemento desaparece y no se pega en la parte superior como con position:fixed
.
¿Hay algún truco o solución para lograr esto?
css
position
css-position
fixed
Zach Nicodemous
fuente
fuente
Respuestas:
Respuesta corta:
no.(Ahora es posible con la transformación CSS. Vea la edición a continuación)Respuesta larga: El problema con el uso de posicionamiento "fijo" es que saca el elemento del flujo . por lo tanto, no se puede reubicar en relación con su padre porque es como si no tuviera uno. Sin embargo, si el contenedor tiene un ancho fijo y conocido, puede usar algo como:
http://jsfiddle.net/HFjU6/1/
Editar (03/2015):
Esta es información desactualizada. Ahora es posible centrar el contenido de un tamaño dinámico (horizontal y verticalmente) con la ayuda de la magia de la transformación CSS3. Se aplica el mismo principio, pero en lugar de usar el margen para compensar su contenedor, puede usarlo
translateX(-50%)
. Esto no funciona con el truco de margen anterior porque no sabe cuánto compensarlo a menos que el ancho sea fijo y no puede usar valores relativos (como50%
) porque será relativo al padre y no al elemento que es aplicado a.transform
se comporta de manera diferente. Sus valores son relativos al elemento al que se aplican. Por lo tanto,50%
paratransform
significa la mitad del ancho del elemento, mientras que50%
para el margen es la mitad del ancho del padre. Esta es una solución IE9 +Usando un código similar al ejemplo anterior, recreé el mismo escenario usando un ancho y una altura completamente dinámicos:
Si quieres que esté centrado, puedes hacerlo también:
Población:
jsFiddle: Centrado horizontalmente solo
jsFiddle: Centrado tanto horizontal como verticalmente
El crédito original va al usuario aaronk6 por señalarlo en esta respuesta
fuente
position:fixed
sin especificartop
o aleft
veces funciona? Algunos navegadores parecen predeterminar el elemento a donde normalmente estaría, si tuviera un posicionamiento normal. stackoverflow.com/questions/8712047/…left:inherit
al elemento de posición fija puede obligar al navegador a respetar el desplazamiento de los padres.En realidad, esto es posible y la respuesta aceptada solo trata de la centralización, que es lo suficientemente sencilla. Además, realmente no necesitas usar JavaScript.
Esto te permitirá lidiar con cualquier escenario:
Configure todo como lo haría si desea posicionar: absoluto dentro de una posición: contenedor relativo, y luego cree una nueva posición fija div dentro del div con
position: absolute
, pero no establezca sus propiedades superior e izquierda. Luego se reparará donde lo desee, en relación con el contenedor.Por ejemplo:
Lamentablemente, esperaba que este hilo resuelva mi problema con WebKit de Android que representa píxeles de desenfoque de sombra de cuadro como márgenes en elementos de posición fijos, pero parece que es un error.
De todos modos, ¡espero que esto ayude!
fuente
Sí, de acuerdo con las especificaciones, hay una manera.
Si bien estoy de acuerdo en que Graeme Blackwood debe ser la respuesta aceptada, ya que prácticamente resuelve el problema, debe tenerse en cuenta que un elemento fijo se puede colocar relativamente en su contenedor.
Noté por accidente que al aplicar
para el cuerpo, hizo un niño fijo relativo a él (en lugar de la ventana gráfica). Entonces mis elementos fijos
left
ytop
propiedades ahora eran relativos al contenedor.Así que investigué un poco y descubrí que Eric Meyer ya había cubierto el problema e incluso si se sentía como un "truco", resulta que esto es parte de las especificaciones:
http://www.w3.org/TR/css3-transforms/
Entonces, si aplica cualquier transformación a un elemento padre, se convertirá en el bloque contenedor.
Pero...
El problema es que la implementación parece defectuosa / creativa, porque los elementos también dejan de comportarse como arreglados (incluso si este bit no parece ser parte de la especificación).
El mismo comportamiento se encontrará en Safari, Chrome y Firefox, pero no en IE11 (donde el elemento fijo seguirá siendo fijo).
Otro interesante (no documentado) es que cuando un elemento fijo está contenido dentro de un elemento transformado, mientras que sus
top
yleft
propiedades ahora estarán relacionados con el contenedor, respetando labox-sizing
propiedad, su contexto de desplazamiento se extenderá sobre el borde del elemento, como casilla si -tamaño se estableció enborder-box
. Para algunos creativos, esto podría convertirse en un juguete :)PRUEBA
fuente
left:
(teniendo en cuenta que eso lo estropea)La respuesta es sí, siempre que no establezca
left: 0
oright: 0
después de establecer la posición div en fijo.http://jsfiddle.net/T2PL5/85/
Verifique la barra lateral div. Es fijo, pero está relacionado con el padre, no con el punto de vista de la ventana.
fuente
position: sticky
esa es una nueva forma de posicionar elementos que es conceptualmente similar aposition: fixed
. La diferencia es que un elemento con seposition: sticky
comporta comoposition: relative
dentro de su padre, hasta que se alcanza un umbral de desplazamiento determinado en la ventana gráfica.En Chrome 56 (actualmente beta a diciembre de 2016, estable en enero de 2017) posición: adhesivo ahora está de vuelta.
https://developers.google.com/web/updates/2016/12/position-sticky
¡Más detalles están en Stick your landings! posición: tierras pegajosas en WebKit .
fuente
position:sticky
es genial. Compatible con todos los navegadores, excepto IE caniuse.com/#feat=css-stickySOLUCIÓN 2019: puede usar la
position: sticky
propiedad.Aquí hay un ejemplo de CODEPEN que demuestra el uso y también en qué se diferencia
position: fixed
.A continuación se explica cómo se comporta:
Un elemento con una posición fija se coloca en función de la posición de desplazamiento del usuario. Básicamente actúa como
position: relative
hasta que un elemento se desplaza más allá de un desplazamiento específico, en cuyo caso se convierte en posición: fijo. Cuando se desplaza hacia atrás, vuelve a su posición anterior (relativa).Efectúa el flujo de otros elementos en la página, es decir, ocupa un espacio específico en la página (al igual que
position: relative
).Si se define dentro de algún contenedor, se coloca con respecto a ese contenedor. Si el contenedor tiene algo de desbordamiento (desplazamiento), dependiendo del desplazamiento del desplazamiento se convierte en posición: fijo.
Entonces, si desea lograr la funcionalidad fija pero dentro de un contenedor, use adhesivo.
fuente
position: sticky
Aún no lo sabía . Ayudó mucho, gracias!Simplemente quite los estilos superior e izquierdo de la posición fija div. Aquí hay un ejemplo
El #content div se sentará donde sea que se encuentre el padre parent, pero se fijará allí.
fuente
He creado este complemento jQuery para resolver un problema similar que tenía cuando tenía un contenedor centrado (datos tabulares), y quería que el encabezado se fijara en la parte superior de la página cuando se desplazaba la lista, pero quería que se anclara a los datos tabulares para que estén donde coloque el contenedor (centrado, izquierda, derecha) y también permitan que se mueva hacia la izquierda y hacia la derecha con la página cuando se desplace horizontalmente.
Aquí está el enlace a este complemento jQuery que puede resolver este problema:
https://github.com/bigspotteddog/ScrollToFixed
La descripción de este complemento es la siguiente:
Este complemento se usa para fijar elementos en la parte superior de la página, si el elemento se hubiera desplazado fuera de la vista, verticalmente; sin embargo, permite que el elemento continúe moviéndose hacia la izquierda o hacia la derecha con el desplazamiento horizontal.
Dada una opción marginTop, el elemento dejará de moverse verticalmente hacia arriba una vez que el desplazamiento vertical haya alcanzado la posición de destino; pero, el elemento aún se moverá horizontalmente a medida que la página se desplaza hacia la izquierda o hacia la derecha. Una vez que la página se ha desplazado hacia abajo y pasa la posición de destino, el elemento se restaurará a su posición original en la página.
Este complemento ha sido probado en Firefox 3/4, Google Chrome 10/11, Safari 5 e Internet Explorer 8/9.
Uso para su caso particular:
fuente
Tuve que hacer esto con un anuncio que mi cliente quería sentarse fuera del área de contenido. ¡Simplemente hice lo siguiente y funcionó de maravilla!
fuente
Dos elementos HTML y CSS puro (navegadores modernos)
Vea este ejemplo de jsFiddle.Cambie el tamaño y vea cómo los elementos fijos incluso se mueven con los elementos flotantes en los que se encuentran. Use la barra de desplazamiento más interna para ver cómo funcionaría el desplazamiento en un sitio (los elementos fijos permanecen fijos).
Como muchos aquí han dicho, una de las claves es no seleccionar ningún ajuste de posición en el
fixed
elemento (no haytop
,right
,bottom
, oleft
valores).Más bien, colocamos todos los elementos fijos (observe cómo la última caja tiene cuatro de ellos) primero en la caja en la que se deben colocar, de esta manera:
Luego usamos
margin-top
ymargin-left
para "moverlos" en relación con su contenedor, algo así como lo hace este CSS:Tenga en cuenta que debido a que los
fixed
elementos ignoran todos los demás elementos de diseño, el contenedor final en nuestro violín puede tener múltiplesfixed
elementos y aún tener todos esos elementos relacionados con la esquina superior izquierda. Pero esto solo es cierto si todos se colocan primero en el contenedor, ya que este violín de comparación muestra que si se dispersa dentro del contenido del contenedor, el posicionamiento se vuelve poco confiable .Si el contenedor es estático , relativo o absoluto en posición, no importa.
fuente
Puede probar mi complemento jQuery, FixTo .
Uso:
fuente
Otra solución extraña para lograr una posición fija relativa es convertir su contenedor en un iframe, de esa manera su elemento fijo se puede fijar a la ventana gráfica del contenedor y no a toda la página.
fuente
Con CSS puro no puedes lograrlo; al menos no lo he hecho. Sin embargo, puedes hacerlo con jQuery de manera muy simple. Explicaré mi problema, y con un pequeño cambio puedes usarlo.
Entonces, para empezar, quería que mi elemento tuviera una parte superior fija (desde la parte superior de la ventana) y un componente izquierdo para heredar del elemento principal (porque el elemento principal está centrado). Para establecer el componente izquierdo, simplemente coloque su elemento en el elemento primario y configúrelo
position:relative
para el elemento principal.Entonces necesita saber cuánto es desde arriba su elemento cuando la barra de desplazamiento está en la parte superior (y cero desplazado); Hay dos opciones de nuevo. Primero es que es estático (algún número) o tiene que leerlo desde el elemento padre.
En mi caso, son 150 píxeles de la estática superior. Entonces, cuando ves 150, es cuánto es el elemento desde la parte superior cuando no nos hemos desplazado.
CSS
jQuery
fuente
Esto es fácil (según HTML a continuación)
El truco es NO usar la parte superior o izquierda del elemento (div) con "position: fixed;". Si no se especifican, el elemento "contenido fijo" aparecerá RELATIVO al elemento que lo encierra (el div con "posición: relativo;") ¡EN LUGAR de la ventana del navegador!
Lo anterior me permitió ubicar un botón de "X" de cierre en la parte superior de una gran cantidad de texto en un div con desplazamiento vertical. La "X" se coloca en su lugar (no se mueve con el texto desplazado y, sin embargo, se mueve hacia la izquierda o hacia la derecha con el contenedor div adjunto cuando el usuario cambia el tamaño del ancho de la ventana del navegador. Por lo tanto, se "fija" verticalmente, pero se coloca en relación con ¡El elemento envolvente horizontalmente!
Antes de que esto funcionara, la "X" se desplazaba hacia arriba y fuera de la vista cuando desplazaba el contenido del texto hacia abajo.
Disculpas por no proporcionar mi función javascript hideDiv (), pero innecesariamente haría que esta publicación sea más larga. Opté por mantenerlo lo más corto posible.
fuente
Creé un jsfiddle para demostrar cómo funciona esto usando transform.
HTML
CSS
jQuery
https://jsfiddle.net/bx6ktwnn/1/
fuente
Tengo el mismo problema, uno de los miembros de nuestro equipo me da una solución. Para permitir la posición de arreglo div y en relación con otro div, nuestra solución es usar un contenedor padre para envolver el div fijo y el div de desplazamiento.
css
fuente
fuente
Sí, es posible siempre y cuando no establezca la posición (
top
oleft
, etc.) de sufixed
elemento (sin embargo, aún puede usarmargin
para establecer una posición relativa). Simon Bos publicó sobre esto hace un tiempo .Sin embargo, no espere que el elemento fijo se desplace con parientes no fijos.
Vea una demostración aquí .
fuente
Hice algo así hace un tiempo. Era bastante nuevo en JavaScript, así que estoy seguro de que puedes hacerlo mejor, pero aquí hay un punto de partida:
Necesitará establecer su ancho, y luego obtiene el ancho de la ventana y cambia el margen cada pocos segundos. Sé que es pesado, pero funciona.
fuente
Es posible si usa JavaScript. En este caso, el plugin jQuery Sticky-Kit :
fuente
Mi proyecto es .NET ASP Core 2 MVC Angular 4 template con Bootstrap 4. Agregar "sticky-top" al componente principal de la aplicación html (es decir, app.component.html) en la primera fila funcionó, como sigue:
¿Es esa la convención o simplifiqué demasiado esto?
fuente
Cuando usa la
position:fixed
regla CSS y trata de aplicartop
/left
/right
/bottom
se posiciona el elemento en relación con la ventana.Una solución alternativa es usar
margin
propiedades en lugar detop
/left
/right
/bottom
fuente
Mira esto:
fuente