Ich suche nach einem zuverlässigen Weg, um die Breite des Fensters in em-Einheiten mit Javascript zu erhalten. Ich war überrascht zu sehen, dass jQuery nur ein Ergebnis in Pixelmessungen zurückgibt. Jede Hilfe wird geschätzt.Ist es möglich, die Breite des Fensters in em-Einheiten mit Javascript zu erhalten?
Antwort
Dies scheint zu funktionieren:
$(window).width()/parseFloat($("body").css("font-size"));
sein soll Für diejenigen, die sich auf font-size% und Medienabfragen verlassen, ändern $ ("body"). Css ("font-size") zu $ ("html"). css ("font-size"), um eine möglichst genaue Fensterbreite in ems zu erhalten. – ontananza
Das Schöne an diesem Ansatz ist, dass es extrem flexibel wird, da man das ** $ (window) .width() ** auf das Ziel ändern kann. – blackhawk
Das ist großartig. Ich habe das eine Stunde lang gesucht. – salep
Es ist möglich, es zu berechnen, aber em
ist kein „einfacher“ Einheit wie px
weil es auf einer Schriftauswahl abhängt (dh eine Kombination von Schriftfamilie , Stil (fett, kursiv usw.) und Schriftgröße). Natürlich kann die Schriftgröße selbst relativ sein (z. B. wenn Sie einer Schriftart eine em
, ex
oder eine prozentuale Größe geben, dann wird die berechnete px
Höhe für diese Schriftart von der Größe des Elternelements abgeleitet).
Um die em
Breite einer Seite erhalten Sie die Konvertierung wie dies tun könnte (Warnung: 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;
}
einfach, da wir 1em = 16px
var window_width_em = 1/16 * window_width_px;
Angenommen, 1em ist 16 px ist irreführend falsch. Em-Einheiten sind relativ zur kaskadierten Schriftgröße eines Elements. Hinzufügen der css 'html {font-size: 10px; } 'oder' html {font-size: 1.5em; } würde zu 1em ***! = *** 16px führen. Weiter außerhalb der Entwicklerkontrolle liegt die Tatsache, dass die "Standard-16px-Schriftgröße" vom Benutzeragenten festgelegt wird und vom Benutzer nach Belieben *** geändert werden kann. –
Diese Antwort ist immer noch falsch, egal wie viele meiner Antworten Sie unten abstimmen :) –
Für diejenigen wissen, die es brauchen alles zusammen, funktioniert dieser Code für mich:
<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>
Es ist PU t zusammen mit der obigen Antwort hinzugefügt, um die window-width test code im verknüpften Tutorial gefunden.
Hier ist eine Lösung, die jQuery nicht benötigt und keine explizite Erklärung der Schriftgröße benötigt.
+1 - wird keinen Unterschied machen, aber 'html' wäre etwas * korrekter * als' body' für em nimmt die Root-Schriftart Größe und das ist HTML – m02ph3u5
- 1. Ist es möglich, die Breite des Zählers zu ändern?
- 2. Ist es möglich, die Position des relativen Elements des dom-Elements zu erhalten?
- 3. Ist es möglich, die letzte Zeile eines Textes mit einer festen Breite dynamisch zu erhalten?
- 4. Ist es möglich, die Position von div im Browser-Viewport zu erhalten? Nicht innerhalb des Dokuments. Innerhalb des Fensters
- 5. Höhe und Breite des Körpers oder Fensters der Webseite erhalten
- 6. Breite der DIV abhängig von der Breite des Fensters
- 7. Ist es möglich, den Adressbucheintrag des aktuellen Benutzers zu erhalten?
- 8. Ist es möglich, die NUMBER zu erhalten, die mit einer Zeichenfolge verkettet wurde? (Javascript)
- 9. Ist es möglich, die verweisende Methode in VB.NET zu erhalten?
- 10. Ist es möglich zu erkennen, wenn sich der Speicherort eines JavaScript-geöffneten Fensters ändert?
- 11. Ist es möglich, HTML in die Javascript-Konsole zu rendern?
- 12. Ist es möglich, die Ausführung in Javascript/Jquery zu stoppen?
- 13. Ist es möglich, die Größe des Modals in den Optionen
- 14. ist es möglich, Parameter von Funktionsnamen erhalten in Javascript
- 15. Ist es möglich, die automatischen Hyperlinks des iPhone zu deaktivieren?
- 16. Ist es möglich, die Breite des Tabsymbols im Textfeld zu ändern?
- 17. Breite des in JavaScript geladenen Bilds abrufen
- 18. Ist es möglich, Dateizugriff mit Flash-Player-Laufzeit zu erhalten?
- 19. Ist es möglich, eine Befehlszeilenanwendung ohne Anzeige des Fensters zu starten?
- 20. Ist es möglich, die Telefonnummer über Google oAuth2 zu erhalten?
- 21. Ist es möglich, dieses Javascript zu vereinfachen?
- 22. Drag and Drop - Ist es möglich, die URL zu erhalten?
- 23. Ist es möglich, die Koordinatenposition eines Flowables zu erhalten, nachdem es mit ReportLab.platypus gerendert wurde?
- 24. Ist es möglich, die Elementbreite in Prozent zu setzen?
- 25. Mit openpyxl ist es möglich, den Druckbereich zu erhalten?
- 26. Ist es möglich, Statistiken mit TortoiseSVN zu erhalten?
- 27. Die Breite/Höhe des gesamten Browsers in IE erhalten?
- 28. Box mit Rand auf voller Breite des Fensters
- 29. Ist es möglich, Telefonnummer mit Google plus API zu erhalten
- 30. ist es möglich, die Breite/Höhe eines Iframe innerhalb von
em ist relativ zu der Größe Ihrer Schriftarten. Wenn Ihre Schriftgröße 12 px ist, gibt Ihnen die Breite des Fensters geteilt durch 12 den gleichen Betrag. Es hängt davon ab, welche Schriftart dies relativ zu – kmb64