如何在 JavaScript 中设置多个 CSS 样式?

IT技术 javascript coding-style
2021-02-07 11:24:31

我有以下 JavaScript 变量:

var fontsize = "12px"
var left= "200px"
var top= "100px"

我知道我可以像这样迭代地将它们设置为我的元素:

document.getElementById("myElement").style.top=top
document.getElementById("myElement").style.left=left

是否可以一次将它们全部设置在一起,像这样?

document.getElementById("myElement").style = allMyStyle 
6个回答

如果您将 CSS 值作为字符串,并且没有为元素设置其他 CSS(或者您不关心覆盖),请使用cssText属性

document.getElementById("myElement").style.cssText = "display: block; position: absolute";

您还可以使用模板文字来获得更简单、更易读的多行​​类 CSS 语法:

document.getElementById("myElement").style.cssText = `
  display: block; 
  position: absolute;
`;

这在某种意义上很好,因为它避免了每次更改属性时重新绘制元素(以某种方式“一次”更改它们)。

另一方面,您必须先构建字符串。

@kennebec:刚试过,你是对的。我不知道,我只是认为它附加到已经存在的文本中。但它确实取代了value观......
2021-03-22 11:24:31
@kennebec 我进行了 jsperf 测试,发现按顺序应用多个 css 规则比使用 cssText 方法更快:jsperf.com/csstext-vs-multiple-css-rules/4
2021-03-26 11:24:31
@RohitTigga:包含 CSS 规则的字符串。例如display: block; position: absolute;
2021-03-27 11:24:31
document.getElementById("myElement").style.cssText +=';'+ cssString; 将为 element.style.cssText 返回一个“标准化”值 - 新字符串将用任何新值替换现有的命名属性,添加新值并保留其余部分。
2021-03-31 11:24:31
以防万一你不想点击链接,我从@AndreiOniga运行了测试,并且显式设置(例如,elem.style.width = '300px';)几乎比任何替代方法都快一个数量级因此,替代方案的速度要慢 90%,而且它们都同样缓慢。
2021-04-10 11:24:31

使用Object.assign

Object.assign(yourelement.style,{fontsize:"12px",left:"200px",top:"100px"});

这也使您能够合并样式,而不是重写 CSS 样式。

你也可以做一个快捷功能:

const setStylesOnElement = function(styles, element){
    Object.assign(element.style, styles);
}
@Nirazul 如何使用它?我尝试document.querySelector('html').style = Object.assign({}, document.querySelector('html').style, { color: 'red'})但没有任何反应。
2021-03-26 11:24:31
@AndrewSilver - 使用 babel && 众多 polyfill 库之一来在不兼容的浏览器中获得对 ES6 功能的支持。
2021-03-27 11:24:31
遗憾的是,IE11 不支持这种方法kangax.github.io/compat-table/es6/...
2021-03-28 11:24:31
使用 babel 时,这是要使用的方法!完美的!
2021-03-29 11:24:31
当您展开一个简单的 javascript 对象时,这就足够了 - 根本不需要分配任何东西:Object.assign(document.querySelector('html').style, { color: 'red' });...只需确保样式不会在较低的元素中被覆盖。当在html元素上使用它时,这是很有可能的
2021-04-02 11:24:31

@Mircea:在单个语句中为元素设置多种样式非常容易。它不会影响现有属性并避免使用 for 循环或插件的复杂性。

document.getElementById("demo").setAttribute(
   "style", "font-size: 100px; font-style: italic; color:#ff0000;");

小心:如果稍后您使用此方法添加或更改样式属性,则之前使用“setAttribute”设置的属性将被删除。

removeAttribute可能会派上用场对于那些可能正在考虑使用setAttribute重置样式的人
2021-03-28 11:24:31
对我来说可能是最好的解决方案
2021-04-06 11:24:31

制作一个函数来处理它,并使用您想要更改的样式将参数传递给它。

function setStyle( objId, propertyObject )
{
 var elem = document.getElementById(objId);
 for (var property in propertyObject)
    elem.style[property] = propertyObject[property];
}

并像这样称呼它

setStyle('myElement', {'fontsize':'12px', 'left':'200px'});

对于 propertyObject 中的属性值,您可以使用变量..

我每次都单独使用 .style 属性,以便在更改样式时不会覆盖,但这效果更好,更简洁。
2021-03-23 11:24:31
最佳解决方案,因为与 cssText 一样灵活有用,但速度更快。
2021-04-09 11:24:31

我只是在这里偶然发现,我不明白为什么需要这么多代码来实现这一点。

使用String Interpolation添加您的 CSS 代码

let styles = `
    font-size:15em;
    color:red;
    transform:rotate(20deg)`

document.querySelector('*').style = styles
a

如果出现问题,则只是由于实施不当。这完全取决于您将其应用于代码的方式、时间和地点。
2021-03-19 11:24:31
我也使用这种方法,因为如果您没有其他内联样式,它很有用,但有时会导致问题。
2021-04-09 11:24:31