Mais qu'en est-il si le conteneur n'est pas le viewport (corps) ?
Cette question est posée dans un commentaire d'Alex sous la réponse acceptée .
Ce fait ne signifie pas vw
ne peut être utilisé dans une certaine mesure pour dimensionner ce conteneur. Pour voir une quelconque variation, il faut supposer que le conteneur est, d'une manière ou d'une autre, flexible en termes de taille. Que ce soit par un pourcentage direct width
ou en étant 100% moins les marges. Le point devient "discutable" si le conteneur est toujours réglé sur, disons, 200px
large - alors il suffit de définir une font-size
qui fonctionne pour cette largeur.
Exemple 1
Avec un conteneur de largeur flexible, cependant, il faut réaliser que d'une certaine manière le conteneur est sont toujours dimensionnés en dehors de la fenêtre d'affichage . En tant que tel, il s'agit d'ajuster une vw
en fonction de ce pourcentage de différence de taille par rapport à la fenêtre d'affichage, ce qui signifie qu'il faut tenir compte du dimensionnement des enveloppes parentales. Prenez cet exemple :
div {
width: 50%;
border: 1px solid black;
margin: 20px;
font-size: 16px;
/* 100 = viewport width, as 1vw = 1/100th of that
So if the container is 50% of viewport (as here)
then factor that into how you want it to size.
Let's say you like 5vw if it were the whole width,
then for this container, size it at 2.5vw (5 * .5 [i.e. 50%])
*/
font-size: 2.5vw;
}
En supposant ici que le div
est un enfant de la body
c'est 50%
de ce 100%
width, qui est la taille de la fenêtre d'affichage dans ce cas de base. En fait, vous voulez définir un vw
qui va vous plaire. Comme vous pouvez le voir dans mon commentaire sur le contenu CSS ci-dessus, vous pouvez " réfléchir " mathématiquement à la taille complète de la fenêtre d'affichage, mais vous ne pouvez pas besoin de pour ce faire. Le texte va "fléchir" avec le conteneur parce que le conteneur fléchit avec le redimensionnement de la fenêtre d'affichage. MISE À JOUR : voici un exemple de deux conteneurs de taille différente .
Exemple 2
Vous pouvez contribuer à garantir le dimensionnement des fenêtres d'affichage en forçant le calcul sur cette base. Prenons l'exemple suivant :
html {width: 100%;} /* Force 'html' to be viewport width */
body {width: 150%; } /* Overflow the body */
div {
width: 50%;
border: 1px solid black;
margin: 20px;
font-size: 16px;
/* 100 = viewport width, as 1vw = 1/100th of that
Here, the body is 150% of viewport, but the container is 50%
of viewport, so both parents factor into how you want it to size.
Let's say you like 5vw if it were the whole width,
then for this container, size it at 3.75vw
(5 * 1.5 [i.e. 150%]) * .5 [i.e. 50%]
*/
font-size: 3.75vw;
}
Le dimensionnement est toujours basé sur la fenêtre d'affichage, mais il est essentiellement basé sur la taille du conteneur lui-même.
La taille du conteneur doit-elle changer dynamiquement...
Si le dimensionnement de l'élément conteneur finissait par changer dynamiquement sa relation en pourcentage soit via @media
ou via JavaScript, la "cible" de base, quelle qu'elle soit, devrait être recalculée pour maintenir la même "relation" pour la taille du texte.
Prenons l'exemple n°1 ci-dessus. Si le div
est passé à 25%
largeur par soit @media
ou JavaScript, alors dans le même temps, la font-size
devra s'adapter, soit dans la requête média, soit par JavaScript, au nouveau calcul de l'indice 5vw * .25 = 1.25
. La taille du texte sera ainsi identique à celle qu'il aurait eu si la "largeur" de l'original avait été la même. 50%
a été réduit de moitié en raison du dimensionnement de la fenêtre d'affichage, mais il a maintenant été réduit en raison d'un changement dans son propre calcul du pourcentage.
Un défi
Avec le CSS3 calc()
fonction en cours d'utilisation, il deviendrait difficile de l'ajuster dynamiquement, car cette fonction ne fonctionne pas pour les font-size
à l'heure actuelle. Vous ne pouvez donc pas effectuer un ajustement purement CSS 3 si votre largeur change sur calc()
. Bien sûr, un ajustement mineur de la largeur pour les marges peut ne pas être suffisant pour justifier un changement de font-size
donc cela n'a pas d'importance.
45 votes
font-size: 100%;
signifie 100% de la taille que le texte aurait eu (c'est-à-dire celle qu'il hérite de son parent). Par défaut, cette taille est de 16px. Donc, si vous utilisez 50 %, la taille du texte sera de 8px.35 votes
Ce que vous recherchez est appelé typographie responsive ou viewport sized. css-tricks.com/viewport-sized-typography
9 votes
Donnez FitText un regard.
12 votes
@Andy : En fait, "par défaut" correspond à la taille de texte définie par les utilisateurs dans leur navigateur, qui n'est pas nécessairement de 16px.
1 votes
Regardez cette réponse stackoverflow.com/a/28485608/4251431
0 votes
@PatsyIssa Si seulement il existait quelque chose comme ça qui ne nécessite pas jQuery !
0 votes
@Michael Regardez ma version JS pure, stackoverflow.com/a/58564958/3097454