【问题标题】:setting a css variable via javascript通过 javascript 设置 css 变量
【发布时间】:2017-12-22 02:40:00
【问题描述】:

我正在尝试获取浏览器窗口的高度和宽度并将其显示在正文上以及更改高度以匹配。

这是我当前的代码:

window.onresize = window.onload = function() {
  width = this.innerWidth;
  height = this.innerHeight;
  document.body.innerHTML = width + 'x' + height; // For demo purposes
}

上面的代码在body上显示宽度和高度ok,现在是时候将它添加到一个css变量中了:

var header = document.querySelector('.header')

window.onresize = window.onload = function() {
  width = this.innerWidth;
  height = this.innerHeight;
  header.style.setProperty('--height', height);
  header.style.setProperty('--width', width);
  document.body.innerHTML = width + 'x' + height; // For demo purposes
}

我知道代码不正确但我找不到任何可比较的示例,这里有一个小提琴,以防代码不够。

https://jsfiddle.net/rbtwsxd8/6/

【问题讨论】:

  • 您在控制台中查看了吗...? headernull。您已将代码放在<head> 中,而无需等待文档加载,因此选择器将找不到它们的元素。您还在调整大小时重写了<body>,从而完全删除了您的header 元素。
  • 抱歉,我是 javascript 新手。不明白为什么那是空的,如果我使用 document.getElementById("header") 并将类更改为 id 上的 div 并替换行 header.style.setProperty('--height', height); with document.getElementById("header").style.setProperty('--height', height);我认为这很有效,尽管我的尺寸仍然没有改变
  • 在 JSFiddle 中,您已将代码设置为嵌入 "No wrap in ",这意味着它将嵌入到您的页面头部 <script>标签。这部分代码在页面的其余部分之前加载,因此当您的代码行找到header 时,它还没有加载,因此找不到。选项是将其包装在 onLoad 侦听器中(这样它会在页面加载完成时运行),或者将它扔到 <body> 的末尾(这样它只会在 之后被点击<body> 已加载)。

标签: javascript css-variables


【解决方案1】:
window.onresize = window.onload = function() {
    var header = document.querySelector('.header')
    width = this.innerWidth;
    height = this.innerHeight;
    header.innerHTML = width + 'x' + height; // For demo purposes
    header.style.setProperty('height', height + 'px')
    header.style.setProperty('width', width + 'px');
   //header.style.height = height + 'px';
   //header.style.width =width + 'px';
}

fiddle

【讨论】:

  • 在这种情况下,我不是反对者,但这是我经常反对的那种答案:它只是一个代码转储,没有解释哪里出了问题使用原始代码。
  • 提问者只是要求比较代码。让他通过提问来学习。
【解决方案2】:

这里有很多不同的问题:

  • (至少在小提琴中)你试图 document.queryselect 在它存在之前的标题元素
  • 您的调试代码通过设置document.body 覆盖了标题元素
  • 您在设置高度和宽度时省略了单位(这曾经在“怪癖模式”下工作,但在现代文档类型中不起作用。)
  • 您在尝试设置高度和宽度时添加了额外的双连字符

这是一个纠正这些问题的工作版本:

window.onresize = window.onload = function() {
  var header = document.querySelector('.header');

  // your original code used 'this.innerWidth' etc, which does work
  // (because the function is being run on the window object) but can
  // be confusing; may be better to refer to the window object 
  // explicitly:
  var width = window.innerWidth;
  var height = window.innerHeight;

  header.style.width = width + "px"; // need 'px' units
  header.style.height = height + "px";
  // the above is equivalent shorthand for
  // header.style.setProperty('height', window.innerHeight + 'px');
  // header.style.setProperty('width', window.innerWidth + 'px');

  // setting this inside the header, so we don't remove it in the process:
  header.innerHTML = width + "x" + height;
}

https://jsfiddle.net/pm7rgx4q/1/

【讨论】:

  • 但是这里的 CSS 变量在哪里?
  • 在“风格”下。 foo.style 是 DOM 元素 foo 的 CSS 对象。
  • @DjordjeVujicic header.style.heightheader 元素的 CSS 高度变量。它是style.setProperty 的简写;我已经在答案中澄清了这一点。
  • 非常感谢。我觉得这两个答案都有效,但正如你在你的一个 cmets 中提到的那样,对你的代码的解释有很大帮助,并且更容易学习和查看我哪里出错了。
  • 很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 2016-11-09
  • 2022-04-14
  • 2012-07-15
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多