.width()

针对匹配的元素集合中的第一个元素,取得当前的计算宽度,或者针对每个匹配的元素设置宽度。

.width()返回类型:Number

描述:针对匹配的元素集合中的第一个元素,取得当前的计算宽度。

  • 增补版本:1.0.width()

    • 此方法不接受任何参数。

.css(width).width()的区别在于,后者返回一个无单位的像素值(例如400),而前者返回一个带有完整的单位的值(例如,400px)。如果元素的宽度需要用于数学计算,建议使用.width方法。

插图 1 - 计量宽度的演示

此方法还可以找到窗口的宽度和文档的宽度。

1
2
3
4
5
// Returns width of browser viewport
$( window ).width();
// Returns width of HTML document
$( document ).width();

请注意,.width()将始终返回内容宽度,无论CSS box-sizing属性的值如何。自从jQuery 1.8以业,这可能需要检索CSS宽度加上box-sizing属性,然后当元素具有box-sizing: border-box时,减去每个元素上任何潜在的边框以及补白。若要避免此不利之处,请用.css( "width" )而不是用.width()

注意:如果stylescript标签给了绝对定位和display:block,它们将针对.width()height()报告一个值,但是强烈不建议在这些标签上调用那些方法。除了是一种坏做法,此结果还被证明为不可靠。

补充说明:

  • 由尺寸相关的API返回的数字,包括.width(),在有些情况下可能是小数。代码并不假设它是一个整型数。而且,当用户缩放网页时,尺寸可能不正确;浏览器并不曝露一个API,以诊测此条件。
  • 当元素或它的父元素是隐藏的时候,.width()报告的值并不保证是精确的。若要取得精确的值,请确保在使用width()之前,元素是可见的。jQuery将尝试临时显示,然后再次隐藏一个元素,以测量出它的尺寸,但是这是不可靠的,而且(哪怕准确)也会显著影响网页的性能。在未来的jQuery版本中,可能删除这种先显示再隐藏的测量功能。

示例:

显示各种宽度。请注意,值来自浮动框架,所以可能小于你的期待。黄色高亮来自浮动框架体。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>width demo</title>
<style>
body {
background: yellow;
}
button {
font-size: 12px;
margin: 2px;
}
p {
width: 150px;
border: 1px red solid;
}
div {
color: red;
font-weight: bold;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button id="getp">Get Paragraph Width</button>
<button id="getd">Get Document Width</button>
<button id="getw">Get Window Width</button>
<div>&nbsp;</div>
<p>
Sample paragraph to test width
</p>
<script>
function showWidth( ele, w ) {
$( "div" ).text( "The width for the " + ele + " is " + w + "px." );
}
$( "#getp" ).click(function() {
showWidth( "paragraph", $( "p" ).width() );
});
$( "#getd" ).click(function() {
showWidth( "document", $( document ).width() );
});
$("#getw").click(function() {
showWidth( "window", $( window ).width() );
});
</script>
</body>
</html>

演示:

.width( value )返回类型:jQuery

描述:针对每个匹配的元素设置宽度

  • 增补版本:1.0.width( value )

    • value
      类型:String or Number
      一个整型数,代表像素数,或者一个整型数,后面带有可选的测度单位(作为字符串)。
  • 增补版本:1.4.1.width( function )

    • function
      类型:Function( Integer index, Integer value ) => String or Number
      一个函数,返回要设置的高度。检索集合中索引位置,以及旧的高度,作为参数。在此函数内部,this指的是集合中的当前元素。

在调用.width("value")时,此值既可以是一个字符串(数字和单位),也可以是一个数字。如果只向该值提供一个数字,jQuery会假定它的单位是像素。然而,如果提供了一个字符串,则必须提供一个用于高度的有效的CSS测量(譬如100px50%auto)。请注意,在现代浏览器中,CSS高度属性并不包括补白、边框或边距,除非使用了CSS属性box-sizing

如果没有明确指定单位(譬如“em”或“%”),则假定单位是“px”。

请注意,.width("value")设置了盒的内容宽度,无论CSSbox-sizing属性的值是什么。

示例:

当每个<div>第一次被点击时,改变它的宽度(并改变它的颜色)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>width demo</title>
<style>
div {
width: 70px;
height: 50px;
float: left;
margin: 5px;
background: red;
cursor: pointer;
}
.mod {
background: blue;
cursor: default;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div>d</div>
<div>d</div>
<div>d</div>
<div>d</div>
<div>d</div>
<script>
var modWidth = 50;
$( "div" ).one( "click", function() {
$( this ).width( modWidth ).addClass( "mod" );
modWidth -= 8;
});
</script>
</body>
</html>

演示: