Je voudrais utiliser des requêtes multimédias pour redimensionner des éléments en fonction de la taille d'un div
élément dans lequel ils se trouvent. Je ne peux pas utiliser la taille de l'écran car il div
est simplement utilisé comme un widget dans la page Web, et sa taille peut varier.
Mettre à jour
Il semble que des travaux soient en cours à ce sujet: https://github.com/ResponsiveImagesCG/cq-demos
css
media-queries
Yazz.com
la source
la source
Réponses:
Non, les requêtes multimédias ne sont pas conçues pour fonctionner en fonction des éléments d'une page. Ils sont conçus pour fonctionner en fonction des appareils ou des types de supports (d'où leur raison d'être des requêtes de supports ).
width
,,height
et d'autres fonctionnalités multimédias basées sur des dimensions font toutes référence aux dimensions de la fenêtre ou de l'écran du périphérique dans les médias basés sur l'écran. Ils ne peuvent pas être utilisés pour faire référence à un certain élément sur une page.Si vous devez appliquer des styles en fonction de la taille d'un certain
div
élément de votre page, vous devrez utiliser JavaScript pour observer les changements de taille de cetdiv
élément au lieu des requêtes multimédias.la source
@element
requêtes. Le W3C a une bonne documentation sur la rime / la raison des@media
requêtes: w3.org/TR/css3-mediaqueries/#width (ce lien vous amène à la section discutant des largeurs --- largeurs du type de média, pas les éléments contenus dans)Je viens de créer un shim javascript pour atteindre cet objectif. Jetez un coup d'œil si vous le souhaitez, c'est une preuve de concept, mais attention: c'est une version ancienne et a encore besoin de travail.
https://github.com/marcj/css-element-queries
la source
min-width
renouvelés; dois-je écrire manuellement la liste de classe css, les éléments marqués, activés pour lemin-width
renouvellement?Une requête multimédia à l'intérieur d'une iframe peut fonctionner comme une requête d'élément. J'ai réussi à implémenter cela. L'idée est venue d'un récent article sur les annonces responsives de Zurb. Pas de Javascript!
la source
Ce n'est actuellement pas possible avec CSS seul comme l'écrit @BoltClock dans la réponse acceptée, mais vous pouvez contourner cela en utilisant JavaScript.
J'ai créé un prolyfill de requête de conteneur (aka requête d'élément) pour résoudre ce type de problème. Il fonctionne un peu différemment des autres scripts, vous n'avez donc pas à modifier le code HTML de vos éléments. Tout ce que vous avez à faire est d'inclure le script et de l'utiliser comme ceci dans votre CSS:
https://github.com/ausi/cq-prolyfill
la source
J'ai rencontré le même problème il y a quelques années et j'ai financé le développement d'un plugin pour m'aider dans mon travail. J'ai publié le plugin en open-source pour que d'autres puissent en bénéficier également, et vous pouvez le récupérer sur Github: https://github.com/eqcss/eqcss
Il existe plusieurs façons d'appliquer différents styles réactifs en fonction de ce que nous pouvons savoir sur un élément de la page. Voici quelques requêtes d'éléments que le plugin EQCSS vous permettra d'écrire en CSS:
Quelles sont donc les conditions prises en charge pour les styles réactifs avec EQCSS?
Requêtes de poids
px
%
px
%
Requêtes de hauteur
px
%
px
%
Nombre de requêtes
Sélecteurs spéciaux
Dans les requêtes d'éléments EQCSS, vous pouvez également utiliser trois sélecteurs spéciaux qui vous permettent d'appliquer plus spécifiquement vos styles:
$this
(le ou les éléments correspondant à la requête)$parent
(les éléments parents des éléments correspondant à la requête)$root
(l'élément racine du document,<html>
)Les requêtes d'éléments vous permettent de composer votre mise en page à partir de modules de conception adaptés individuellement, chacun avec un peu de «conscience de soi» de la façon dont ils sont affichés sur la page.
Avec EQCSS, vous pouvez concevoir un widget pour qu'il soit beau de 150 pixels de large jusqu'à 1000 pixels de large, puis vous pouvez déposer ce widget en toute confiance dans n'importe quelle barre latérale de n'importe quelle page en utilisant n'importe quel modèle (sur n'importe quel site) et
la source
Du point de vue de la mise en page, il est possible d'utiliser des techniques modernes.
Son composé (je crois) par Heydon Pickering. Il détaille le processus ici: http://www.heydonworks.com/article/the-flexbox-holy-albatross
Chris Coyier le récupère et travaille à travers une démonstration ici: https://css-tricks.com/putting-the-flexbox-albatross-to-real-use/
Pour reformuler le problème, nous voyons ci-dessous 3 du même composant, chacun composé de trois divs orange étiquetés
a
,b
etc
.Les blocs des deux derniers s'affichent verticalement, car ils sont limités sur la pièce horizontale, tandis que les composants supérieurs 3 blocs sont disposés horizontalement.
Il utilise la
flex-basis
propriété CSS et les variables CSS pour créer cet effet.Démo
L'article de Heydon est de 1000 mots l'expliquant en détail, et je recommande fortement de le lire.
la source
La question est très vague. Comme le dit BoltClock, les requêtes multimédias ne connaissent que les dimensions de l'appareil. Cependant, vous pouvez utiliser des requêtes multimédias en combinaison avec des sélecteurs de descendant pour effectuer des ajustements.
La seule autre solution nécessite JS.
la source
La seule façon dont je peux penser que vous pouvez accomplir ce que vous voulez uniquement avec CSS, est d'utiliser un conteneur fluide pour votre widget. Si la largeur de votre conteneur est un pourcentage de l'écran, vous pouvez utiliser des requêtes multimédias pour styliser en fonction de la largeur de votre conteneur, car vous saurez maintenant pour les dimensions de chaque écran quelles sont les dimensions de votre conteneur. Par exemple, supposons que vous décidiez de faire de votre conteneur 50% de la largeur de l'écran. Alors pour une largeur d'écran de 1200px vous savez que votre container fait 600px
la source
Je pensais également aux requêtes des médias, mais j'ai trouvé ceci:
Créez simplement un wrapper
<div>
avec un pourcentage pourpadding-bottom
, comme ceci:Il en résultera une
<div>
hauteur égale à 75% de la largeur de son contenant (un rapport d'aspect de 4: 3).Cette technique peut également être associée à des requêtes multimédias et à un peu de connaissances ad hoc sur la mise en page pour un contrôle encore plus fin.
C'est suffisant pour mes besoins. Ce qui pourrait aussi suffire à vos besoins.
la source
Vous pouvez utiliser le ResizeObserver API . C'est encore à ses débuts, il n'est pas encore pris en charge par tous les navigateurs (mais il existe plusieurs polyfills qui peuvent vous aider avec cela).
Fondamentalement, cette API vous permet d'attacher un écouteur d'événements au redimensionnement d'un élément DOM.
Démo 1 - Démo 2
la source
Pour le mien, je l'ai fait en définissant la largeur maximale de la div, donc pour le petit widget ne sera pas affecté et le grand widget est redimensionné en raison du style max-width.
la source
.widget
est juste un échantillon comme classe pour la div du widget.