Tengo un problema al centrar un elemento que tiene el atributo position
establecido en absolute
. ¿Alguien sabe por qué las imágenes no están centradas?
body {
text-align: center;
}
#slideshowWrapper {
margin-top: 50px;
text-align: center;
}
ul#slideshow {
list-style: none;
position: relative;
margin: auto;
}
ul#slideshow li {
position: absolute;
}
ul#slideshow li img {
border: 1px solid #ccc;
padding: 4px;
height: 450px;
}
<body>
<div id="slideshowWrapper">
<ul id="slideshow">
<li><img src="img/dummy1.JPG" alt="Dummy 1" /></li>
<li><img src="img/piano_unlicened.JPG" alt="Dummy 2" /></li>
</ul>
</div>
</body>
html
css
css-position
centering
usuario1098278
fuente
fuente
Respuestas:
Si ha establecido un ancho, puede usar:
fuente
Sin conocer el
width
/height
del elemento 1 posicionado , todavía es posible alinearlo de la siguiente manera:EJEMPLO AQUÍ
Vale la pena señalar que CSS Transform es compatible con IE9 y superior . (Prefijos de proveedor omitidos por brevedad)
Explicación
Agregar
top
/left
of50%
mueve el borde del margen superior / izquierdo del elemento al centro del elemento primario ytranslate()
funciona con el valor (negativo) de-50%
mueve el elemento a la mitad de su tamaño. Por lo tanto, el elemento se colocará en el medio.Esto se debe a que un valor porcentual en
top
/left
propiedades es relativo a la altura / anchura del elemento padre (que está creando un bloque contenedor).Mientras que un valor porcentual en la función de transformación es relativo al ancho / alto del elemento en sí (en realidad se refiere al tamaño del cuadro delimitador ) .
translate()
Para la alineación unidireccional, vaya con
translateX(-50%)
o en sutranslateY(-50%)
lugar.1. Un elemento con un
position
distinto destatic
. Es decirrelative
,absolute
,fixed
valores.fuente
position: absolute; left: 50%; transform: translateX(-50%);
, centrado vertical:position: absolute; top: 50%; transform: translateY(-50%);
.translate
propiedad, traduzco el elemento por el tamaño de sí mismo , sin importar el tamaño de su padre.Centrar algo bien
absolute
posicionado es bastante complicado en CSS.Cambie
margin-left
a (negativo) la mitad del ancho del elemento que está tratando de centrar.fuente
Divida el centro alineado vertical y horizontalmente
Nota: Los elementos deben tener ancho y alto para establecer
fuente
height
conjunto para que esto funcione.Un simple truco CSS, solo agrega:
Esto funciona tanto en imágenes como en texto.
fuente
Si quieres centrar un elemento absoluto
Si desea que un contenedor esté centrado de izquierda a derecha, pero no de arriba a abajo
Si desea que un contenedor se centre de arriba a abajo, independientemente de si se deja de derecha a izquierda
Actualización al 15 de diciembre de 2015
Bueno, aprendí esto otro truco nuevo hace unos meses. Asumiendo que tiene un elemento padre relativo.
Aquí va tu elemento absoluto.
Con esto, creo que es una mejor respuesta que mi solución anterior. Ya que no tiene que especificar ancho Y alto. Éste adapta el contenido del elemento en sí.
fuente
Centrar un elemento "posición: absoluto".
fuente
Esto funcionó para mí:
fuente
para centrar una posición: atributo absoluto que necesita establecer a la izquierda: 50% y margen a la izquierda: -50% del ancho del div.
para el centro vertical absoluto, debe hacer lo mismo, no con la izquierda, sino con la parte superior. (NOTA: html y el cuerpo deben tener una altura mínima del 100%;)
y se puede combinar para ambos
fuente
ver demo en: http://jsfiddle.net/MohammadDayeh/HrZLC/
text-align: center
; funciona con unposition: absolute
elemento al agregarleft: 0; right: 0;
fuente
Lo más simple, lo mejor:
Luego debe insertar su etiqueta img en una etiqueta que posea una posición: propiedad relativa, de la siguiente manera:
fuente
probablemente el más corto
fuente
Si no conoce el ancho del elemento, puede usar este código:
Demostración en fiddle: http://jsfiddle.net/wrh7a21r/
Fuente: https://stackoverflow.com/a/1777282/1136132
fuente
O ahora puede usar el cuadro flexible con posición absoluta:
fuente
No estoy seguro de lo que quieres lograr, pero en este caso solo agregar
width: 100%;
a tuul#slideshow li
voluntad será el truco.Explicación
Las
img
etiquetas son elementos de bloque en línea. Esto significa que fluyen en línea como texto, pero también tienen un ancho y una altura como elementos de bloque. En su CSS hay dostext-align: center;
reglas aplicadas al<body>
y al#slideshowWrapper
(que es redundante por cierto) esto hace que todos los elementos secundarios en línea y bloque en línea se centren en sus elementos de bloque más cercanos, en su código estas sonli
etiquetas. Todos los elementos de bloque tienenwidth: 100%
si son el flujo estático (position: static;
), que es el valor predeterminado. El problema es que cuando le dices a lasli
etiquetas que seanposition: absolute;
, las sacas del flujo estático normal, y esto hace que reduzcan su tamaño para ajustarse a su contenido interno, en otras palabras, como que "pierden" suwidth: 100%
propiedad.fuente
Usar
left: calc(50% - Wpx/2);
donde W es el ancho del elemento me funciona.fuente
Sus imágenes no están centradas porque los elementos de su lista no están centrados; solo su texto está centrado. Puede lograr el posicionamiento que desea centrando la lista completa o centrando las imágenes dentro de la lista.
Una versión revisada de su código se puede encontrar en la parte inferior. En mi revisión, centro la lista y las imágenes dentro de ella.
La verdad es que no se puede centrar un elemento que tiene un conjunto condiciones de absoluta.
¡Pero este comportamiento puede ser imitado!
Nota: Estas instrucciones funcionarán con cualquier elemento de bloque DOM, no solo img.
Rodee su imagen con un div u otra etiqueta (en su caso, un li).
Nota: Los nombres dados a estos elementos no son especiales.
Modifique su css o scss para dar al div un posicionamiento absoluto y centrar su imagen.
¡Y ahí lo tienes! ¡Tu imagen debe estar centrada!
Tu codigo:
Probar esto:
Espero que esto haya sido útil. ¡Buena suerte!
fuente
Un objeto absoluto dentro de un objeto relativo es relativo a su padre, el problema aquí es que necesita un ancho estático para el contenedor
#slideshowWrapper
, y el resto de la solución es como dicen los otros usuarioshttp://jsfiddle.net/ejRTU/10/
fuente
Aquí hay una solución fácil y mejor para el elemento central con "posición: absoluta"
fuente
Puedes probar de esta manera:
fuente
La posición absoluta lo saca del flujo y lo coloca en 0x0 al padre (Último elemento de bloque que tiene una posición absoluta o relativa).
No estoy seguro de qué es exactamente lo que está tratando de lograr, podría ser mejor establecer el li en ay
position:relative
eso los centrará. Dado su CSS actualEcha un vistazo a http://jsfiddle.net/rtgibbons/ejRTU/ para jugar con él.
fuente
No recuerdo dónde vi el método de centrado mencionado anteriormente, usando valores negativos superior, derecho, inferior e izquierdo. Para mí, esta técnica es la mejor, en la mayoría de las situaciones.
Cuando uso la combinación de arriba, la imagen se comporta como una imagen de fondo con la siguiente configuración:
Puede encontrar más detalles sobre el primer ejemplo aquí:
Mantenga la relación de aspecto de un div con CSS
fuente
Lo que parece estar sucediendo es que hay dos soluciones; centrado usando márgenes y centrado usando posición. Ambos funcionan bien, pero si desea posicionar de manera absoluta un elemento relativo a este elemento centrado, debe usar el método de posición absoluta, porque la posición absoluta del segundo elemento se establece de manera predeterminada en el primer elemento primario que está posicionado. Al igual que:
Hasta que leí esta publicación, usando la técnica de margen: 0 automático, para construir un menú a la izquierda de mi contenido, tuve que construir una columna del mismo ancho a la derecha para equilibrarlo. No es bonito. ¡Gracias!
fuente
Use
margin-left: x%;
donde x es la mitad del ancho del elemento.fuente
fuente