Me gustaría usar consultas de medios para cambiar el tamaño de los elementos en función del tamaño de un div
elemento en el que se encuentran. No puedo usar el tamaño de la pantalla, ya div
que solo se usa como un widget dentro de la página web, y su tamaño puede variar.
Actualizar
Parece que ahora se está trabajando en esto: https://github.com/ResponsiveImagesCG/cq-demos
css
media-queries
Yazz.com
fuente
fuente
Respuestas:
No, las consultas de medios no están diseñadas para funcionar según los elementos de una página. Están diseñados para funcionar en función de dispositivos o tipos de medios (de ahí que se denominen consultas de medios ).
width
,height
y otras características de medios basadas en dimensiones, todas se refieren a las dimensiones de la ventana gráfica o de la pantalla del dispositivo en medios basados en pantalla. No se pueden usar para referirse a un determinado elemento en una página.Si necesita aplicar estilos según el tamaño de un determinado
div
elemento en su página, deberá usar JavaScript para observar los cambios en el tamaño de esediv
elemento en lugar de las consultas de medios.fuente
@element
consultas. W3C tiene buena documentación sobre la rima / razón de las@media
consultas: w3.org/TR/css3-mediaqueries/#width (este enlace lo lleva a la sección que discute los anchos --- anchos del tipo de medio, no los elementos contenidos dentro)Acabo de crear un calce de JavaScript para lograr este objetivo. Eche un vistazo si lo desea, es una prueba de concepto, pero tenga cuidado: es una versión temprana y aún necesita algo de trabajo.
https://github.com/marcj/css-element-queries
fuente
min-width
renovación de atributo; ¿necesito escribir manualmente la lista de clase css, elementos marcados, habilitados para lamin-width
renovación?Una consulta de medios dentro de un iframe puede funcionar como una consulta de elemento. He implementado con éxito esto. La idea surgió de una publicación reciente sobre Responsive Ads de Zurb. ¡Sin Javascript!
fuente
Actualmente, esto no es posible solo con CSS, ya que @BoltClock escribió en la respuesta aceptada, pero puede solucionarlo utilizando JavaScript.
Creé una consulta de contenedor (también conocida como consulta de elemento) prolyfill para resolver este tipo de problema. Funciona un poco diferente a otros scripts, por lo que no tiene que editar el código HTML de sus elementos. Todo lo que tiene que hacer es incluir el script y usarlo en su CSS de la siguiente manera:
https://github.com/ausi/cq-prolyfill
fuente
Me encontré con el mismo problema hace un par de años y financié el desarrollo de un complemento para ayudarme en mi trabajo. He lanzado el complemento como código abierto para que otros también puedan beneficiarse de él, y puedes obtenerlo en Github: https://github.com/eqcss/eqcss
Hay algunas maneras en que podríamos aplicar diferentes estilos de respuesta basados en lo que podemos saber sobre un elemento en la página. Aquí hay algunas consultas de elementos que el complemento EQCSS le permitirá escribir en CSS:
Entonces, ¿qué condiciones son compatibles con los estilos receptivos con EQCSS?
Consultas de peso
px
%
px
%
Consultas de altura
px
%
px
%
Contar consultas
Selectores especiales
Dentro de las consultas de elementos EQCSS, también puede usar tres selectores especiales que le permiten aplicar más específicamente sus estilos:
$this
(los elementos que coinciden con la consulta)$parent
(los elementos primarios de los elementos que coinciden con la consulta)$root
(el elemento raíz del documento<html>
)Las consultas de elementos le permiten componer su diseño a partir de módulos de diseño que responden individualmente, cada uno con un poco de "autoconciencia" de cómo se muestran en la página.
Con EQCSS puede diseñar un widget para que se vea bien desde 150 px de ancho hasta 1000 px de ancho, luego puede colocar ese widget con confianza en cualquier barra lateral en cualquier página usando cualquier plantilla (en cualquier sitio) y
fuente
Desde una perspectiva de diseño, es posible utilizando técnicas modernas.
Está hecho (creo) por Heydon Pickering. Detalla el proceso aquí: http://www.heydonworks.com/article/the-flexbox-holy-albatross
Chris Coyier lo recoge y trabaja a través de una demostración aquí: https://css-tricks.com/putting-the-flexbox-albatross-to-real-use/
Para volver a plantear el problema, a continuación vemos 3 del mismo componente, cada uno compuesto por tres divs naranjas etiquetados
a
,b
yc
.Los bloques del segundo dos se muestran verticalmente, ya que están limitados en el espacio horizontal, mientras que los componentes superiores 3 bloques están dispuestos horizontalmente.
Utiliza la
flex-basis
propiedad CSS y las variables CSS para crear este efecto.Manifestación
El artículo de Heydon tiene 1000 palabras que lo explican en detalle, y recomiendo leerlo.
fuente
La pregunta es muy vaga. Como dice BoltClock, las consultas de los medios solo conocen las dimensiones del dispositivo. Sin embargo, puede usar consultas de medios en combinación con selectores descendentes para realizar ajustes.
La única otra solución requiere JS.
fuente
La única forma en que puedo pensar que puedes lograr lo que quieres con CSS, es usar un contenedor de fluido para tu widget. Si el ancho de su contenedor es un porcentaje de la pantalla, entonces puede usar consultas de medios para diseñar dependiendo del ancho de su contenedor, ya que ahora sabrá para las dimensiones de cada pantalla cuáles son las dimensiones de su contenedor. Por ejemplo, supongamos que decide hacer que su contenedor tenga el 50% del ancho de la pantalla. Luego, para un ancho de pantalla de 1200px, sabe que su contenedor es de 600px
fuente
También estaba pensando en las consultas de los medios, pero luego encontré esto:
Simplemente cree un contenedor
<div>
con un valor de porcentaje parapadding-bottom
, como este:El resultado será una
<div>
altura igual al 75% del ancho de su contenedor (una relación de aspecto de 4: 3).Esta técnica también se puede combinar con consultas de medios y un poco de conocimiento ad hoc sobre el diseño de la página para un control aún más detallado.
Es suficiente para mis necesidades. Lo cual podría ser suficiente para sus necesidades también.
fuente
Puedes usar el ResizeObserver API . Todavía está en sus primeros días, por lo que todavía no es compatible con todos los navegadores (pero hay varios polyfills que pueden ayudarlo con eso).
Básicamente, esta API le permite adjuntar un detector de eventos al cambio de tamaño de un elemento DOM.
Demo 1 - Demo 2
fuente
Para el mío lo hice estableciendo el ancho máximo del div, por lo tanto, para el widget pequeño no se verá afectado y el widget grande se redimensionará debido al estilo de ancho máximo.
fuente
.widget
es solo una muestra como la clase para el div del widget.