La traducción del eje Y de un elemento al 50% lo moverá hacia abajo el 50% de su propia altura, no el 50% de la altura de los padres como es de esperar. ¿Cómo le digo a un elemento de traducción que base su porcentaje de traducción en el elemento principal? ¿O no estoy entendiendo algo?
css
translate
percentage
translate3d
Andrew Tibbetts
fuente
fuente
Respuestas:
Cuando se usa el porcentaje en traducir, se refiere al ancho o alto de sí mismo. Eche un vistazo a https://davidwalsh.name/css-vertical-center ( demostración ):
fuente
transform: translate(50%)
parece usar el ancho y la altura del elemento principalPuede usar vw y vh para traducir según el tamaño de la ventana gráfica
@keyframes bubbleup { 0% { transform: translateY(100vh); } 100% { transform: translateY(0vh); } }
fuente
Lo que me funciona usando solo CSS es:
.child { position: relative; top: 50%; left: 50%; transform: translate(-50%, -50%); /* Backward compatibility */ -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); }
Cómo funciona:
fuente
Para usar el porcentaje en la propiedad de traducción, debe usar Javascript: http://jsfiddle.net/4wqEm/27/
Código HTML :
<div id="parent"> <div id="children"></div> </div>
Código CSS:
#parent { width: 200px; height: 200px; background: #ff0; } #children { width: 10%; height: 10%; background: #f00; }
Código Javascript:
parent = document.getElementById('parent'); children = document.getElementById('children'); parent_height = parent.clientHeight; children_translate = parent_height * 50/100; children.style.webkitTransform = "translateY("+children_translate+"px)";
Espero poder ayudarte y decirme si tienes algún otro problema.
fuente
Su declaración es absolutamente correcta sobre los porcentajes que provienen del elemento traducido. En lugar de usar la propiedad translate en su caso, debería usar el posicionamiento absoluto para permanecer en relación con el div principal. Absolutamente coloqué verticalmente su div rojo aquí: (no se olvide de agregar la posición relativa al div principal, debe colocarse de manera diferente a la predeterminada estática):
js fiddle pen aquí
body { margin: 0; width: 100%; height: 100%; } body > div { width: 200px; height: 200px; background: #ff0; position: relative; } body > div > div { width: 10%; height: 10%; -webkit-transform: translateY(-50%); background: #f00; position: absolute; top: 50%; }
fuente
También puede usar un bloque adicional y usar la transición para él, excepto el nodo secundario
Código HTML :
<div id="parent"> <div id="childrenWrapper"> <div id="children"></div> </div> </div>
css debería ser algo como esto
#parent { position: relative; width: 200px; height: 200px; background: #ff0; } #childrenWrapper{ width: 100%; height: 100%; } #children { width: 10%; height: 10%; background: #f00; }
fuente
Puede hacer que el elemento esté en una posición absoluta y usar la propiedad izquierda y superior para tomar el valor porcentual como principal.
fuente
Está bifurcado con el posicionamiento requerido en la siguiente muestra de trabajo de URL
body { margin: 0; width: 100%; height: 100%; } body>div { position: relative; width: 200px; height: 200px; background: #ff0; } body>div>div { position: absolute; left: 50%; top: 50%; width: 10%; height: 10%; background: #f00; transform: translate(-50%, -50%); }
notas:
fuente
La solución a este problema es no utilizar la traducción en absoluto. Cuando traduce un elemento, el porcentaje que selecciona se basa en su propia altura.
Si desea colocar el elemento en función de la altura del padre, use top: 50%;
Entonces el código se verá así:
body { margin: 0; width: 100%; height: 100%; } body > div { width: 200px; height: 200px; background: #ff0; position: relative; } body > div > div { position: absolute; top: 50%; width: 10%; height: 10%; /* -webkit-transform: translateY(50%); */ background: #f00; }
fuente