[英]jQuery width getting wrong value
我有一个jquery方法.width()的问题。 我有4个不同的textarea需要根据包含它们的div的大小调整大小,所以我调用方法.width()来获取div的实际宽度(无论如何是窗口的100%)但是这个方法即使在$(窗口).ready()中包装所有内容后,也总是得到错误的值。
这是CSS
#contCode{
width: 100%;
height: 500px;
margin-top: 50px;
float: left;
padding: 0;
}
.codeArea{
float: left;
font-family: "Lucida Console", Monaco, monospace;
height:100%;
padding: 5px 0 0 5px;
margin: 0;
border-right: 1px solid black;
border-bottom: 1px solid black;
resize: none;
}
这是HTML
<div id="contCode">
<textarea class="codeArea" placeholder="Put your code here"></textarea>
<textarea class="codeArea" placeholder="Put your code here"></textarea>
<textarea class="codeArea" placeholder="Put your code here"></textarea>
<div class="codeArea"></div>
</div>
这是剧本
$(window).ready(function (){
var wi = $("#contCode").width();
var wiTex;
wiTex = (wi) / 4;
$(".codeArea").width(wiTex);
});
我已经尝试使用outerWidth和innerWith并得到了相同的结果。
我发现了两个问题。 我知道的第一个
您需要添加box-sizing: border-box
,这样当你设置的width
包含边框宽度的箱子。 如果不这样做,设置为100px
且边框为1px
框实际上102px
宽。
我发现的第二个问题是使用jQuery的.width()
方法。 出于某种原因,即使我手动设置为.width('100px')
,盒子也被设置为112px
。 我改为使用vanilla JavaScript。
您可以从下面的演示中看到这些框现在对齐。
$(window).ready(function() { var wi = $("#contCode").width(); var wiTex = (wi) / 4; document.querySelectorAll('.codeArea').forEach(function(node) { node.style.width = wiTex+'px' }) });
#contCode { width: 100%; height: 500px; margin-top: 50px; float: left; padding: 0; } .codeArea { float: left; font-family: "Lucida Console", Monaco, monospace; height: 100%; padding: 5px 0 0 5px; margin: 0; border-right: 1px solid black; border-bottom: 1px solid black; resize: none; background: #ccc; box-sizing: border-box; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="contCode"> <textarea class="codeArea" placeholder="Put your code here"></textarea> <textarea class="codeArea" placeholder="Put your code here"></textarea> <textarea class="codeArea" placeholder="Put your code here"></textarea> <div class="codeArea">The result area</div> </div>
只是用这个:
$(document).ready(function (){
var wi = $("#contCode").width();
var wiTex;
wiTex = (wi) / 4;
$(".codeArea").width(wiTex - 7); //here is the trick =)
});
为什么我下调7像素? 这是因为css如何计算元素的宽度。
在css中,width等于width + padding + border
。 在您的情况下,元素的实际宽度将是: wiTex
+ 5px of left padding
+ 2 pixels of borders
你甚至可以删除javascript
代码并使用此css
:
.codeArea{
float: left;
font-family: "Lucida Console", Monaco, monospace;
height:100%;
padding: 5px 0 0 5px;
margin: 0;
border-right: 1px solid black;
border-bottom: 1px solid black;
resize: none;
width: calc(25% - 7px); /* magic =) */
}
你可以自己看看 。
试试这个!
#contCode{ width: 100%; height: 500px; margin-top: 50px; float:left; padding: 0; } .codeArea{ float: left; font-family: "Lucida Console", Monaco, monospace; height:100%; width:22%; //Added this padding:5px 0 0 5px; margin: 0; border:1px solid #ccc; color:#333; resize: none; background-color:#eee; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="contCode"> <textarea class="codeArea" placeholder="Put your code here"></textarea> <textarea class="codeArea" placeholder="Put your code here"></textarea> <textarea class="codeArea" placeholder="Put your code here"></textarea> <div class="codeArea">Hello World</div> </div>
干杯!
在第3个textarea之后有一个换行符。 是因为CSS3盒子大小的属性? 默认情况下,它是content-box,它只包含内容本身但不包含填充。 你需要将它改为边框;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.