我遇到了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并得到相同的结果。
答案 0 :(得分:1)
我发现了两个问题。我知道的第一个
您需要添加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'
})
});
&#13;
#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;
}
&#13;
<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>
&#13;
答案 1 :(得分:1)
只需使用:
$(document).ready(function (){
var wi = $("#contCode").width();
var wiTex;
wiTex = (wi) / 4;
$(".codeArea").width(wiTex - 7); //here is the trick =)
});
为什么我会生成7个像素?这是因为css如何计算元素的宽度。
在css中,宽度等于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 =) */
}
你可以自己see。
答案 2 :(得分:1)
试试这个!
#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;
}
&#13;
<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>
&#13;
干杯!
答案 3 :(得分:0)
第3个textarea之后有一个换行符。是因为CSS3盒子大小的属性?默认情况下,它是content-box,它只包含内容本身但不包含填充。您需要将其更改为border-box;