Как добавить CSS с помощью Javascript? - PullRequest
136 голосов
/ 02 апреля 2009

Как добавить правила CSS (например, strong { color: red }) с помощью Javascript?

Ответы [ 13 ]

182 голосов
/ 02 апреля 2009

Простой и прямой подход заключается в создании и добавлении нового узла style в документ.

// Your CSS as text
var styles = `
    .qwebirc-qui .ircwindow div { 
        font-family: Georgia,Cambria,"Times New Roman",Times,serif;
        margin: 26px auto 0 auto;
        max-width: 650px;
    }
    .qwebirc-qui .lines {
        font-size: 18px;
        line-height: 1.58;
        letter-spacing: -.004em;
    }

    .qwebirc-qui .nicklist a {
        margin: 6px;
    }
`

var styleSheet = document.createElement("style")
styleSheet.type = "text/css"
styleSheet.innerText = styles
document.head.appendChild(styleSheet)
94 голосов
/ 02 апреля 2009

Вы также можете сделать это, используя CSS-интерфейсы DOM Level 2 ( MDN ):

var sheet = window.document.styleSheets[0];
sheet.insertRule('strong { color: red; }', sheet.cssRules.length);

... на всех, кроме (естественно) IE, который использует свою собственную незначительно отличающуюся формулировку:

sheet.addRule('strong', 'color: red;', -1);

В этом есть теоретическое преимущество по сравнению с методом createElement-set-innerHTML, заключающееся в том, что вам не нужно беспокоиться о размещении специальных символов HTML в innerHTML, но на практике элементы стиля - это CDATA в устаревшем HTML, и «<» и «&» в любом случае редко используются в таблицах стилей. </p>

Вам нужна таблица стилей, прежде чем вы сможете начать добавлять ее следующим образом. Это может быть любая существующая активная таблица стилей: внешняя, встроенная или пустая, это не имеет значения. Если его нет, то единственным стандартным способом его создания на данный момент является createElement.

25 голосов
/ 02 июня 2011

Решение Бена Бланка не будет работать в IE8 для меня.

Однако это работало в IE8

function addCss(cssCode) {
var styleElement = document.createElement("style");
  styleElement.type = "text/css";
  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = cssCode;
  } else {
    styleElement.appendChild(document.createTextNode(cssCode));
  }
  document.getElementsByTagName("head")[0].appendChild(styleElement);
}
22 голосов
/ 15 февраля 2013

Вот немного обновленная версия решения Криса Херринга , учитывая, что вы также можете использовать innerHTML вместо создания нового текстового узла:

function insertCss( code ) {
    var style = document.createElement('style');
    style.type = 'text/css';

    if (style.styleSheet) {
        // IE
        style.styleSheet.cssText = code;
    } else {
        // Other browsers
        style.innerHTML = code;
    }

    document.getElementsByTagName("head")[0].appendChild( style );
}
3 голосов
/ 04 октября 2016

Этот простой пример добавления <style> в заголовок HTML

var sheet = document.createElement('style');
sheet.innerHTML = "table th{padding-bottom: 0 !important;padding-top: 0 !important;}\n"
+ "table ul {    margin-top: 0 !important;    margin-bottom: 0 !important;}\n"
+ "table td{padding-bottom: 0 !important;padding-top: 0 !important;}\n"
+ ".messages.error{display:none !important;}\n"
+ ".messages.status{display:none !important;} ";

document.body.appendChild(sheet); // append in body
document.head.appendChild(sheet); // append in head

Источник Динамический стиль - манипулирование CSS с помощью JavaScript

3 голосов
/ 02 апреля 2009

Вы можете добавлять классы или атрибуты стиля для каждого элемента отдельно.

Например:

<a name="myelement" onclick="this.style.color='#FF0';">text</a>

Где вы могли бы сделать this.style.background, this.style.font-size и т. Д. Вы также можете применить стиль, используя тот же метод ala

this.className='classname';

Если вы хотите сделать это в функции JavaScript, вы можете использовать getElementByID вместо 'this'.

3 голосов
/ 02 апреля 2009

YUI совсем недавно добавил утилиту специально для этого. Смотрите stylesheet.js здесь.

2 голосов
/ 29 августа 2017

Это мое решение добавить правило CSS в конец последнего списка таблиц стилей:

var css = new function()
{
    function addStyleSheet()
    {
        let head = document.head;
        let style = document.createElement("style");

        head.appendChild(style);
    }

    this.insert = function(rule)
    {
        if(document.styleSheets.length == 0) { addStyleSheet(); }

        let sheet = document.styleSheets[document.styleSheets.length - 1];
        let rules = sheet.rules;

        sheet.insertRule(rule, rules.length);
    }
}

css.insert("body { background-color: red }");
1 голос
/ 23 июня 2018

Вот пример шаблона, который поможет вам начать

Требуется 0 библиотек и используется только javascript для внедрения HTML и CSS.

Функция была заимствована у пользователя @Husky выше

Полезно, если вы хотите запустить скрипт tampermonkey и хотите добавить наложение переключения на веб-сайт (например, приложение заметок)

// INJECTING THE HTML
document.querySelector('body').innerHTML += '<div id="injection">Hello World</div>';

// CSS INJECTION FUNCTION
///627687/kak-dobavit-css-s-pomoschy-javascript
function insertCss( code ) {
    var style = document.createElement('style');
    style.type = 'text/css';
    if (style.styleSheet) {
        // IE
        style.styleSheet.cssText = code;
    } else {
        // Other browsers
        style.innerHTML = code;
    }
    document.getElementsByTagName("head")[0].appendChild( style );
}

// INJECT THE CSS INTO FUNCTION
// Write the css as you normally would... but treat it as strings and concatenate for multilines
insertCss(
  "#injection {color :red; font-size: 30px;}" +
  "body {background-color: lightblue;}"
)
1 голос
/ 27 июня 2015

Другим вариантом является использование JQuery для хранения встроенного свойства элемента в стиле, добавления к нему и последующего обновления свойства стиля элемента новыми значениями. Следующим образом:

function appendCSSToElement(element, CssProperties)
        {
            var existingCSS = $(element).attr("style");

             if(existingCSS == undefined) existingCSS = "";

            $.each(CssProperties, function(key,value)
            {
                existingCSS += " " + key + ": " + value + ";";
            });

            $(element).attr("style", existingCSS);

            return $(element);
        }

А затем выполните его с новыми атрибутами CSS в качестве объекта.

appendCSSToElement("#ElementID", { "color": "white", "background-color": "green", "font-weight": "bold" });

Возможно, это не самый эффективный метод (я открыт для предложений о том, как его улучшить. :)), но он определенно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...