Erfassen wahre Grenze, Polsterung und Marge von Javascript
-
20-08-2019 - |
Frage
Gibt es eine Möglichkeit, die wahre Grenze, Polsterung und Marge von Elementen von Javascript-Code zu erkennen? Wenn Sie auf den folgenden Code aussehen:
<html>
<head>
<style>
<!--
.some_class {
padding-left: 2px;
border: 2px solid green;
}
-->
</style>
<script>
<!--
function showDetails()
{
var elem = document.getElementById("my_div");
alert("elem.className=" + elem.className);
alert("elem.style.padding=" + elem.style.padding);
alert("elem.style.paddingLeft=" + elem.style.paddingLeft);
alert("elem.style.margin=" + elem.style.margin);
alert("elem.style.marginLeft=" + elem.style.marginLeft);
alert("elem.style.border=" + elem.style.border);
alert("elem.style.borderLeft=" + elem.style.borderLeft);
}
-->
</script>
</head>
<body>
<div id="my_div" class="some_class" style="width: 300px; height: 300px; margin-left: 4px;">
some text here
</div>
<button onclick="showDetails();">show details</button>
</body>
</html>
können Sie sehen, wenn Sie auf die Schaltfläche klicken, dass die Polsterung nicht richtig gemeldet wird. Nur die direkt durch „Stil“ definierten Eigenschaften werden zurückgemeldet, sind diejenigen, die durch eine CSS-Klasse nicht gemeldet.
Gibt es eine Möglichkeit die endgültigen Werte dieser Eigenschaften zu kommen? Ich meine die Werte erhalten, nachdem alle CSS-Einstellungen berechnet und durch den Browser angewendet wird.
Lösung
Es ist möglich, aber natürlich jeder Browser hat seine eigene Umsetzung. Glücklicherweise PPK getan hat all die harte Arbeit für uns:
Andere Tipps
die style
Eigenschaft kann die Stile erhalten, die inline wie
<div id="target" style="color:#ddd;margin:10px">test</div>
wenn Sie die Stile in der äußeren CSS-Datei oder <style/>
Element zugeordnet werden wollen, versuchen Sie dies:
var div = document.getElementById("target");
var style = div.currentStyle || window.getComputedStyle(div);
display("Current marginTop: " + style.marginTop);
Wenn Sie jQuery verwenden, @vsync ‚s Lösung ist in Ordnung.
mit jQuery:
var $elm = $('.box');
var hPadding = $elm.outerWidth() - $elm.width();
var vPadding = $elm.outerHeight() - $elm.height();
var hBorder = $elm.outerWidth() - $elm.innerWidth();
var vBorder = $elm.outerHeight() - $elm.innerHeight();
console.log("Horizontal padding & border: ", hPadding);
console.log("Vertical padding & border: ", vPadding);
console.log("Horizontal border: ", hBorder);
console.log("Vertical border: ", vBorder);
.box{
width: 50%;
padding:10vw;
border:10px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='box'></div>
Ihr Weg (aber man muss sagen, paddingLeft, paddingRight..not nur 'padding'):
var elm = $('.box');
console.log("padding left (PX): ", elm.css("paddingLeft"));
.box {
padding:0 50px 0 5vw;
border: 2px solid green;
width: 300px;
height: 300px;
margin-left: 4px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">some text here</div>