.css()
.css( propertyName )
描述:针对匹配的元素集合中的第一个元素,获得一个计算过的样式属性的值。
- propertyName类型:String一个CSS属性
- propertyNames类型:Array一个或多个CSS属性的数组。
.css()
方法是一个便利的方法,从第一个匹配元素上获得经计算的样式属性,尤其是考虑到不同浏览器对大部分的属性访问(在基于标准的浏览器中的getComputedStyle()
方法,相当于Internet Explorer中的currentStyle
属性和runtimeStyle
元素)并且,某些CSS属性,不同浏览器的写法不一。比如说,Internet Explorer的DOM编译器用styleFloat
指代float
属性,与此同时,服从W3C标准的浏览器用cssFloat
指代它。为了统一性,你可以简单使用"float"
,而且jQuery会把它转换成每种浏览器的当前值。
而且,jQuery还会平等地翻译多单词属性的CSS形式和DOM形式。举个例子,jQuery理解并返回了.css( "background-color")
和.css( backgroundColor )
的正确值。这意味着混合大小写有不同的含义,比如说:.css( "WiDtH" )
与.css( "width" )
并不相同。
注意,一个元素的计算样式可能不同于在样式表中对元素指定的那个值。比如说,维度的计算样式总是以像素计的,但是在样式表中它们可能是用em、ex、px或者%指定的。不同的浏览器可以返回逻辑上相等但是字面上不等的CSS颜色值,例如,#FFF、#ffffff以及rgb(255,255,255)。
检索CSS属性的简写(例如,margin
、background
、border
),虽然有些浏览器有这样的功能,但是不能保证。举个例子,如果你想检索到呈现的border-width
,请使用$( elem ).css( "borderTopWidth" )
、$( elem ).css( "borderBottomWidth" )
,等等。
对一个元素调用.css()
方法时,它必须连接到DOM。否则,jQuery将抛出一个错误。
自从jQuery 1.9,向.css()
传递一个样式数据数组,将导致一个属性-值对的对象。举个例子,要想检索border-width
的全部四个呈现值,你可以使用$( elem ).css([ "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth" ])
。
示例
获得一个点击过的div的背景色。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> div { width: 60px; height: 60px; margin: 5px; float: left; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <span id="result"> </span> <div style="background-color:blue;"></div> <div style="background-color:rgb(15,99,30);"></div> <div style="background-color:#123456;"></div> <div style="background-color:#f11;"></div> <script> $( "div" ).click(function() { var color = $( this ).css( "background-color" ); $( "#result" ).html( "That div is <span style='color:" + color + ";'>" + color + "</span>." ); }); </script> </body> </html>
演示结果
获得一个点击过的div的宽度、高度、字色以及背景色。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> div { height: 50px; margin: 5px; padding: 5px; float: left; } #box1 { width: 50px; color: yellow; background-color: blue; } #box2 { width: 80px; color: rgb(255, 255, 255); background-color: rgb(15, 99, 30); } #box3 { width: 40px; color: #fcc; background-color: #123456; } #box4 { width: 70px; background-color: #f11; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p id="result"> </p> <div id="box1">1</div> <div id="box2">2</div> <div id="box3">3</div> <div id="box4">4</div> <script> $( "div" ).click(function() { var html = [ "The clicked div has the following styles:" ]; var styleProps = $( this ).css([ "width", "height", "color", "background-color" ]); $.each( styleProps, function( prop, value ) { html.push( prop + ": " + value ); }); $( "#result" ).html( html.join( "<br>" ) ); }); </script> </body> </html>
演示结果
.css( propertyName )
描述:针对每个匹配的元素,设置一个或多个CSS属性。
- propertyName类型:String一个CSS属性名称
- function一个函数,它返回要设置的值。
this
是当前的元素。检索在集合中该元素的索引值的位置,以及旧值作为参数。
- properties类型:PlainObject一个要设置的属性-值对对象。
就和.prop()
方法那样,.css()
方法使设置元素的属性变得快速而且简单。该方法可以取一个属性名和值,作为独立的参数,也可以取一个键值对对象作为参数。
而且,jQuery还能平等地对待多单词属性的CSS形式和DOM形式。举个例子,jQuery理解并返回了.css({ "background-color": "#ffe", "border-left": "5px solid #ccc" })
和.css({backgroundColor: "#ffe", borderLeft: "5px solid #ccc" })
的正确值。注意,利用DOM记号法,属性名周围的引号是可有可无的,但是利用CSS记号法,对于属性名中带短横的属性,引号是必不可少的。
如果传递一个数字作为值,jQuery将把它转换成字符串,并在字符串末尾添加px
。如果属性需要除了px
之外的单位,请在调用这个方法之前把值转换成字符串,并添加合适的单位。
在将.css()
用作设置器的野外,jQuery修改了元素的style
属性。举个例子,$( "#mydiv" ).css( "color", "green" )
等同于document.getElementById( "mydiv" ).style.color = "green"
。把样式属性的值设置为空字符串——例如,$( "#mydiv" ).css( "color", "" )
——如果它已经直接应用到该属性上了的话,会从这个元素上删除该属性,无论它是在HTML 的元素属性style上,还是通过jQuery的.css()
方法应用这个属性,还是通过直接操纵DOM的style
属性。作为结果,针对该属性的元素的样式将保存为被应用的值。因此,这个方法可以用来撤消你之前实施的任何样式修改。然而,它并不会删除已经用样式表文件或者<style>
元素中的CSS规则应用的样式。警告:一个值得注意的例外是:对于IE 8及以前的版本,删除一个简写的属性,比如说border
或者background
将从元素上删除整个样式,无论在样式表文件或者<style>
元素中怎么设置它。
自从jQuery 1.8,.css
设置器将自动照顾属性名的前缀。举个例子,在Chrome/Safari中,取用.css( "user-select", "none" )
会自动设置为-webkit-user-select
,Firefox会使用-moz-user-select
,而IE10会使用-ms-user-select
。
自从jQuery 1.6,.css()
接受相对值,近似于.animate()
。相对值是用+=
或-=
开头的字符串,用来递增或递减当前值。举个例子,如果一个元素的padding-left是10px,.css( "padding-left", "+=15" )
将产生一个padding-left:25px。
自从jQuery 1.4,.css()
允许我们传入一个函数作为属性值。
$( "div.example" ).css( "width", function( index ) { return index * 50; });
该示例把匹配的元素的宽度设置成一个逐渐增大的值。
注意:如果在设置函数中没有返回任何东西(亦即,function( index, style ){}
),或者如果返回了undefined
,当前的值并没有变化。这可以用来有选择地设置只有满足某些标准的值。
示例
当鼠标移到任一个段落文本上时,改变它的字色。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> p { color: blue; width: 200px; font-size: 14px; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p>Just roll the mouse over me.</p> <p>Or me to see a color change.</p> <script> $( "p" ).on( "mouseover", function() { $( this ).css( "color", "red" ); }); </script> </body> </html>
演示结果
在第一次点击div#box
的时候给它增加200像素宽度。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> #box { background: black; color: snow; width: 100px; padding: 10px; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <div id="box">Click me to grow</div> <script> $( "#box" ).one( "click", function() { $( this ).css( "width", "+=200" ); }); </script> </body> </html>
演示结果
在段落文本中,高亮被点击的单词。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> p { color: blue; font-weight: bold; cursor: pointer; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p> Once upon a time there was a man who lived in a pizza parlor. This man just loved pizza and ate it all the time. He went on to be the happiest man in the world. The end. </p> <script> var words = $( "p" ).first().text().split( /\s+/ ); var text = words.join( "</span> <span>" ); $( "p" ).first().html( "<span>" + text + "</span>" ); $( "span" ).on( "click", function() { $( this ).css( "background-color", "yellow" ); }); </script> </body> </html>
演示结果
当鼠标移进移出时,改变font-weight和background-color。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> p { color: green; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p>Move the mouse over a paragraph.</p> <p>Like this one or the one above.</p> <script> $( "p" ) .on( "mouseenter", function() { $( this ).css({ "background-color": "yellow", "font-weight": "bolder" }); }) .on( "mouseleave", function() { var styles = { backgroundColor : "#ddd", fontWeight: "" }; $( this ).css( styles ); }); </script> </body> </html>
演示结果
在点击一个div时增加它的尺寸。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>css demo</title> <style> div { width: 20px; height: 15px; background-color: #f33; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <div>click</div> <div>click</div> <script> $( "div" ).on( "click", function() { $( this ).css({ width: function( index, value ) { return parseFloat( value ) * 1.2; }, height: function( index, value ) { return parseFloat( value ) * 1.2; } }); }); </script> </body> </html>
演示结果