JavaScript 可以改变@page CSS 的值吗?

Posted

技术标签:

【中文标题】JavaScript 可以改变@page CSS 的值吗?【英文标题】:Can JavaScript change the value of @page CSS? 【发布时间】:2012-06-24 23:48:54 【问题描述】:

以下 CSS 会影响页面默认以纵向还是横向打印。

@page 
   size: landscape;

我意识到这只适用于非常有限的浏览器集,并且用户可以覆盖它。没关系;我只是想提供一个好的默认值。

这在 CSS 中作为静态值可以正常工作,但我想根据用户选择在纵向和横向之间动态切换。是否可以使用 javascript 来更改此值?

【问题讨论】:

Disabling browser print options (headers, footers, margins) from page? 的可能重复项 @J-16SDiZ:我不这么认为;我浏览了那个问题,没有看到任何关于动态更改设置的内容。 @BNL:不多;我花了一些时间在 DOM 中查找可以访问此属性的位置,但找不到任何东西。我考虑过更改样式表本身,模糊地按照 jassonpet 的回答,但这在当时对我来说似乎有问题。 【参考方案1】:

@jasssonpet 用他的回答拯救了我。话虽如此,我将其更改为更简单(在我看来)。

** 不太清楚为什么会这样,但如果你知道,请告诉我。如果只是偏好,那么我将分享我的代码示例,因为其他人的偏好可能更符合我的偏好。

// just create the style tag and set the page size
function setPageSize(cssPageSize) 
    const style = document.createElement('style');
    style.innerhtml = `@page size: $cssPageSize`;
    document.head.appendChild(style);


// how to use it
setPageSize('letter landscape');

编辑:我有一段时间第一次登录,看到了@jasssonpet 的回答,现在对我来说更有意义了。万一其他人感到困惑,他的方法的主要好处是两件事:

    他使用了闭包,因此只有 1 个样式标签添加到页面中,然后可以引用和更改。 他对 cssPagedMedia 进行了扩展,以便添加的任何方法都被命名空间。这样,全局命名空间就不会被污染。

这是 Class 形式的(我觉得更容易理解):

class SingletonStyle 
  constructor() 
    this.style = document.createElement("style");
    document.head.appendChild(this.style);
  

  apply(rule) 
    this.style.innerHTML = rule;
  

  size(size) 
    this.apply("@page size: " + size + "");
  

【讨论】:

jassonpet 的技术在页头中创建一个 Style 元素并返回一个用于更新其值的函数。每次执行时,您的技术都会将新样式元素附加到页头。两种方式都应该有效(最近添加的 CSS 规则将始终覆盖较早的规则),但另一种技术会减少规则污染,并且更容易完全替换现有规则,因此您无需添加相互矛盾的规则。【参考方案2】:

一种简单的方法是为@page 创建一个单独的样式并进行更改:

var cssPagedMedia = (function () 
    var style = document.createElement('style');
    document.head.appendChild(style);
    return function (rule) 
        style.innerHTML = rule;
    ;
());

cssPagedMedia.size = function (size) 
    cssPagedMedia('@page size: ' + size + '');
;

cssPagedMedia.size('landscape');

【讨论】:

我通常会等待几天将某些内容标记为正确,以防其他人提出更多见解,但这是一种很好的、​​明智的方法,而且行之有效;谢谢。 当我从 CSS 中删除 @page 声明时,它对我有用

以上是关于JavaScript 可以改变@page CSS 的值吗?的主要内容,如果未能解决你的问题,请参考以下文章

javascript能不能用变量改变css的值?

JavaScript是如何改变网页的CSS样式的?

JavaScript - CSS 元素样式不会改变?

JavaScript自定义浏览器滚动条兼容IE 火狐和chrome

JavaScript HTML DOM - 改变 CSS

jsoup怎么解析javascript动态改变html标签的属性值