有没有办法从Javascript代码中检测元素的真实边框,填充和边距?如果您查看以下代码:
<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>
如果单击按钮,则可以看到填充未报告正确。仅报告通过“样式”直接定义的属性,不报告通过CSS类定义的属性。
有没有办法找回这些属性的最终值?我的意思是浏览器计算并应用所有CSS设置后获得的值。
答案 0 :(得分:10)
style
属性可以获取内联分配的样式,如
<div id="target" style="color:#ddd;margin:10px">test</div>
如果要获取外部css文件或<style/>
元素中指定的样式,请尝试以下操作:
var div = document.getElementById("target");
var style = div.currentStyle || window.getComputedStyle(div);
display("Current marginTop: " + style.marginTop);
如果您使用的是jQuery,@ vsync的解决方案就可以了。
答案 1 :(得分:7)
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>
你的方式(但你必须说明paddingLeft,paddingRight..不仅仅是'填充'):
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>
答案 2 :(得分:6)
这是可能的,但当然,每个浏览器都有自己的实现。幸运的是,PPK为我们做了所有艰苦的工作: