Je cherche un moyen fiable d'obtenir la largeur de la fenêtre dans les unités em en utilisant javascript. J'ai été surpris de voir que jQuery ne renverra qu'un résultat en pixels. Toute aide est appréciée.
Cela semble fonctionner:
$(window).width() / parseFloat($("body").css("font-size"));
Voici une solution qui ne nécessite pas jQuery ni une déclaration de taille de police explicite.
window.innerWidth /
parseFloat(getComputedStyle(document.querySelector('body'))['font-size'])
Pour ceux qui ont besoin de tout mettre ensemble, ce code fonctionne pour moi:
<p>Window size: <span id="width_px"></span> pixels or <span id="width_ems"></span> ems</p>
<script>
window.onresize = function() {
document.getElementById("width_px").innerHTML = window.innerWidth;
document.getElementById("width_ems").innerHTML = window.innerWidth / parseFloat($("body").css("font-size"));
};
</script>
Pour l'assembler, utilisez la réponse ci-dessus ajoutée au code de test window-width trouvé dans le tutoriel lié.
Il est possible de le calculer, mais em
n'est pas une "simple" unité comme px
car elle dépend d'une sélection de police (c'est-à-dire une combinaison de famille de police, de style (gras, italique, etc.) et de taille de police). Bien sûr, la taille de la police elle-même peut être relative (par exemple, si vous attribuez à une police une taille em
, ex
ou un pourcentage, la hauteur px
calculée pour cette police est déduite de la taille de l'élément parent).
Pour obtenir la largeur em
d'une page, vous pouvez effectuer la conversion comme ceci (avertissement: psuedocode):
// For this to work reliably, size should be in px, pt, or mm.
function getWindowWidthInEm(fontFamily, style, size) {
var box = document.createElement("span");
box.innerText = "M";
box.style.fontFamily = fontFamily;
box.style.fontSize = size;
box.style.fontWeight = style is bold;
box.style.fontStyle = style is italic;
var body = document.getElementsByTagName("body")[0];
body.appendChild( box );
var emInPx = box.getComputedStyle().width;
body.removeChild( box );
var windowPx = window.width;
return windowx / emInPx;
}