Как добавить CSS с Javascript?



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

370   13  

13 ответов:

вы также можете сделать это с помощью интерфейсов DOM Level 2 CSS (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, а ‘

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

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

var css = document.createElement("style");
css.type = "text/css";
css.innerHTML = "strong { color: red }";
document.body.appendChild(css);

решение Бена бланка не будет работать в 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);
}

вот немного обновленная версия решение Криса Херринга, учитывая, что вы можете использовать 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 );
}

Юи совсем недавно добавлена утилита специально для этого.

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

например:

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

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

this.className='classname';

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

Это простой пример добавления <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

версия JavaScript (ES6)

вот чистое и читаемое решение для современных браузеров:

const css = document.createElement( 'style' );

css.textContent = `
    a {
        text-decoration: underline;
    }

    strong {
        color: red;
    }
`;

document.head.appendChild( css );

Примечание: это решение использует Шаблон Литералы которые были введены в ES6. Это позволяет более интуитивно понятный способ добавления CSS.

Это мое решение, чтобы добавить правило 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 }");
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" });

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

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

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

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

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

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

// CSS INJECTION FUNCTION
//https://stackoverflow.com/questions/707565/how-do-you-add-css-with-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;}"
)

вот моя функция общего назначения, которая параметризует селектор и правила CSS и, возможно, принимает имя файла css (с учетом регистра), если вы хотите добавить к определенному листу вместо этого (в противном случае, если вы не предоставите имя файла CSS, он создаст новый элемент стиля и добавит его к существующему заголовку. Он сделает не более одного нового элемента стиля и повторно использует его при будущих вызовах функций). Работает с FF, Chrome и IE9+ (возможно, раньше тоже непроверенные).

function addCssRules(selector, rules, /*Optional*/ sheetName) {
    // We want the last sheet so that rules are not overridden.
    var styleSheet = document.styleSheets[document.styleSheets.length - 1];
    if (sheetName) {
        for (var i in document.styleSheets) {
            if (document.styleSheets[i].href && document.styleSheets[i].href.indexOf(sheetName) > -1) {
                styleSheet = document.styleSheets[i];
                break;
            }
        }
    }
    if (typeof styleSheet === 'undefined' || styleSheet === null) {
        var styleElement = document.createElement("style");
        styleElement.type = "text/css";
        document.head.appendChild(styleElement);
        styleSheet = styleElement.sheet;
    }

    if (styleSheet) {
        if (styleSheet.insertRule)
            styleSheet.insertRule(selector + ' {' + rules + '}', styleSheet.cssRules.length);
        else if (styleSheet.addRule)
            styleSheet.addRule(selector, rules);
    }
}

использовать .css в Jquery нравится $('strong').css('background','red');

$('strong').css('background','red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<strong> Example
</strong> 

Comments

    Ничего не найдено.