Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
Almacenar la altura del elemento en la variable css

Estoy tratando de maximizar el tamaño de un elemento (iframe de reproductor de video integrado) dentro de restricciones particulares:

  1. no debe ser más alto que 2/3 de la altura de su padre.
  2. no debe ser más ancho que su padre.
  3. debe mantener su relación de aspecto 16:9

Actualmente estoy logrando esto con Javascript ( 0.5625 y 1.778 son representaciones decimales de la relación de aspecto 16:9):

 function updateDimensions () { const video = document.querySelector('#video-player') const parentRect = document.querySelector("#parent").getBoundingClientRect() const maxHeight = parentRect.height * 0.667 const maxWidth = Math.min(maxHeight * 1.778, parentRect.width) video.setAttribute('width', maxWidth + 'px') video.setAttribute('height', maxWidth * 0.5625 + 'px') }

Este código se ejecuta una vez en el montaje y (se elimina) en cada cambio de tamaño.

Sin embargo, realmente parece que este debería ser el trabajo de CSS, probablemente sería más eficiente que CSS, y se siente como algo que debería lograrse con calc() , min() , propiedades personalizadas (variables) y aspect-ratio en CSS, pero no puedo averiguar cómo.

Esto es lo lejos que llegué:

 #video-player { --parent-height: ??? /* 1. should not be higher than 2/3 of its parent */ --max-video-height: calc(var(--parent-height) * 0.667) /* 2. should not be wider than its parent */ --video-width: min(calc(var(--max-video-height) * 1.778), 100%) width: var(--video-width) /* 3. should maintain its 16:9 aspect ratio */ /* height can be calculated with either: */ height: calc(var(--video-width) * 0.5625) /* or: */ aspect-ratio: 16 / 9 }

De la forma en que lo he escrito, todo depende de convertir la altura principal en una variable.

¿Hay una manera de hacerlo? ¿O hay otra forma de escribir esto en CSS para lograr lo que hace el código Javascript?

NOTA: anteriormente había estado usando un contenedor div y el truco #video-container { padding-top: 56.25% } para mantener la relación de aspecto del video, pero tener el contenedor configurado en position: relative parecía entrar en conflicto con mis intentos de alinearlo. con align-self: center; justify-self: center; (es un elemento de cuadrícula). Supongo que podría envolver el envoltorio en otro envoltorio y ponerlo en la cuadrícula, pero el código Javascript hace exactamente lo que quiero con el elemento en cuestión, sin necesidad de divs adicionales.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Dependiendo de cómo se agregue su video ( <iframe> o <video> ), esto debería ser todo lo que necesita:

#video-player { height: 100%; max-height: 66.6667%; aspect-ratio: 16/9; }

Muestra de trabajo en codepen

También vale la pena ser consciente de qué tan bien soportada está aspect-ratio . Puedes verlo aquí en el sitio web de caniuse.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!