Может ли JavaScript изменить значение @page CSS?

Следующий CSS влияет на то, печатает ли страница по умолчанию в книжной или альбомной ориентации.

@page {
   size: landscape;
}

Я понимаю, что это работает только на очень ограниченном наборе браузеров, и что пользователь может переопределить его. Это нормально; Я просто пытаюсь обеспечить хороший дефолт.

Это прекрасно работает как статическое значение в CSS, но я бы хотел динамически переключаться между портретным и усилительным режимами. ландшафт на основе выбора пользователя. Можно ли использовать JavaScript для изменения этого значения?

 DNS22 июн. 2012 г., 20:59
@BNL: не так много; Я потратил некоторое время на просмотр DOM, где я мог бы получить доступ к этому свойству, но ничего не смог найти. Я немного подумал о том, чтобы изменить саму таблицу стилей, смутно по аналогии с ответом jasssonpet, но в то время это казалось мне проблематичным.
 DNS22 июн. 2012 г., 20:56
@ J-16SDiZ: я так не думаю; Я просмотрел этот вопрос и ничего не видел о динамическом изменении настроек.
 J-16 SDiZ22 июн. 2012 г., 18:30

Ответы на вопрос(2)

Решение Вопроса

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');
 16 мая 2018 г., 09:11
У меня работает когда убрал@page объявление из CSS
 DNS22 июн. 2012 г., 21:06
Обычно я жду несколько дней, чтобы пометить что-то как правильное, на случай, если кто-то еще придет с большей проницательностью, но это хороший, разумный подход, который просто работает; благодарю вас.
 01 июл. 2015 г., 14:06
Это потрясающе.

@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');

Ваш ответ на вопрос