使用 JavaScript 获取 CSS 值

IT技术 javascript css
2021-02-08 00:21:33

我知道我可以通过 JavaScript设置CSS 值,例如:

document.getElementById('image_1').style.top = '100px';

但是,我可以获得当前的特定样式值吗?我已经阅读了在哪里可以获得元素的整个样式,但是如果不需要,我不想解析整个字符串。

6个回答

您可以使用getComputedStyle().

var element = document.getElementById('image_1'),
    style = window.getComputedStyle(element),
    top = style.getPropertyValue('top');

js小提琴

slw 是首字母缩写词还是您的意思是慢?
2021-03-16 00:21:33
例如,如果您想更改 div 的背景颜色,请注意不要使用“backgroundColor”而不是“backgroung-color”;)
2021-03-18 00:21:33
@DavidWiniecki 我真的不相信 webdevs 仍然应该将 IE8 视为主流浏览器。考虑到微软不再支持它
2021-03-21 00:21:33
IE 8 及更低版本不支持 getComputedStyle。
2021-03-24 00:21:33
有点偏离主题:在 JavaScript 中无法访问某些(全部?)速记 css 属性例如,您可以得到 padding-left 但不能得到 padding。JSFiddle
2021-04-06 00:21:33

element.style 属性让您只知道在该元素中定义为内联的 CSS 属性(以编程方式,或在元素的 style 属性中定义),您应该获得计算出的样式。

跨浏览器的方式不是那么容易,IE有自己的方式,通过element.currentStyle属性,而DOM Level 2标准方式,其他浏览器是通过document.defaultView.getComputedStyle方法实现的。

两种方式有区别,例如IE的element.currentStyle属性期望你访问由camelCase中的两个或多个单词组成的CSS属性名称(例如maxHeight、fontSize、backgroundColor等),标准方式期望具有以下属性的属性用破折号分隔的单词(例如最大高度、字体大小、背景颜色等)。......

function getStyle(el, styleProp) {
    var value, defaultView = (el.ownerDocument || document).defaultView;
    // W3C standard way:
    if (defaultView && defaultView.getComputedStyle) {
        // sanitize property name to css notation
        // (hyphen separated words eg. font-Size)
        styleProp = styleProp.replace(/([A-Z])/g, "-$1").toLowerCase();
        return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
    } else if (el.currentStyle) { // IE
        // sanitize property name to camelCase
        styleProp = styleProp.replace(/\-(\w)/g, function(str, letter) {
            return letter.toUpperCase();
        });
        value = el.currentStyle[styleProp];
        // convert other units to pixels on IE
        if (/^\d+(em|pt|%|ex)?$/i.test(value)) { 
            return (function(value) {
                var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;
                el.runtimeStyle.left = el.currentStyle.left;
                el.style.left = value || 0;
                value = el.style.pixelLeft + "px";
                el.style.left = oldLeft;
                el.runtimeStyle.left = oldRsLeft;
                return value;
            })(value);
        }
        return value;
    }
}

主要参考stackoverflow

使用以下内容。它帮助了我。

document.getElementById('image_1').offsetTop

另请参阅获取样式

无需 DOM 操作即可检查 CSS 值的跨浏览器解决方案:

function get_style_rule_value(selector, style)
{
 for (var i = 0; i < document.styleSheets.length; i++)
 {
  var mysheet = document.styleSheets[i];
  var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;

  for (var j = 0; j < myrules.length; j++)
  {
   if (myrules[j].selectorText && myrules[j].selectorText.toLowerCase() === selector)
   {
    return myrules[j].style[style];
   }
  }
 }
};

用法:

get_style_rule_value('.chart-color', 'backgroundColor')

消毒版本(强制选择器输入为小写,并允许用例不带前导“.”)

function get_style_rule_value(selector, style)
{
 var selector_compare=selector.toLowerCase();
 var selector_compare2= selector_compare.substr(0,1)==='.' ?  selector_compare.substr(1) : '.'+selector_compare;

 for (var i = 0; i < document.styleSheets.length; i++)
 {
  var mysheet = document.styleSheets[i];
  var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;

  for (var j = 0; j < myrules.length; j++)
  {
    if (myrules[j].selectorText)
    {
     var check = myrules[j].selectorText.toLowerCase();
     switch (check)
     {
      case selector_compare  :
      case selector_compare2 : return myrules[j].style[style];
     }
    }
   }
  }
 }
我度过了漫长的一天,但由于多种原因这不起作用。Pastie.org/9754599通过丢弃无效的规则列表并将最终 === 的两边小写,效果会更好。非常感谢您的解决方案仍然挽救了这一天!
2021-03-17 00:21:33
很好的答案,最后添加了一个经过消毒的版本以修复一些边缘情况使用问题。
2021-04-07 00:21:33

如果您以编程方式设置它,您可以像变量一样调用它(即document.getElementById('image_1').style.top)。否则,您始终可以使用 jQuery:

<html>
    <body>
        <div id="test" style="height: 100px;">Test</div>
        <script type="text/javascript" src="jquery.min.js"></script>
        <script type="text/javascript">
            alert($("#test").css("height"));
        </script>
    </body>
</html>
style 属性返回所有应用于元素的内联样式,不是由 css 规则定义的。
2021-03-14 00:21:33
我认为您的 jQuery 示例不是很清楚(或正确)。
2021-04-07 00:21:33