Как добавить CSS-правила (например, strong { color: red }
) с помощью Javascript?
Как добавить CSS с помощью Javascript?
Ответ 1
Вы также можете сделать это с помощью CSS-интерфейсов DOM Level 2 (MDN):
var sheet = window.document.styleSheets[0];
sheet.insertRule('strong { color: red; }', sheet.cssRules.length);
... на всех, кроме (естественно), IE8 и более ранних версиях, которые используют свои собственные незначительно отличающиеся формулировки:
sheet.addRule('strong', 'color: red;', -1);
В этом есть теоретическое преимущество по сравнению с методом createElement-set-innerHTML, заключающееся в том, что вам не нужно беспокоиться о размещении специальных символов HTML в innerHTML, но на практике элементы стиля - это CDATA в устаревшем HTML, и "& л; и ‘& в любом случае редко используются в таблицах стилей.
Вам нужно создать таблицу стилей, прежде чем вы сможете добавить к ней вот так. Это может быть любая существующая активная таблица стилей: внешняя, встроенная или пустая, это не имеет значения. Если его нет, единственным стандартным способом его создания на данный момент является createElement.
Ответ 2
Простой и прямой подход заключается в создании и добавлении нового узла 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)
Ответ 3
Решение Ben Blank не будет работать в 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);
}
Ответ 4
Вот немного обновленная версия решения Chris Herring, учитывая, что вы можете использовать innerHTML
, а не вместо создания нового текста node:
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 );
}
Ответ 5
YUI только недавно добавил утилиту специально для этого. Смотрите stylesheet.js здесь.
Ответ 6
Вы можете добавлять классы или атрибуты стиля на основе элементов по элементам.
Например:
<a name="myelement" onclick="this.style.color='#FF0';">text</a>
Где вы могли бы сделать this.style.background, this.style.font-size и т.д. Вы также можете применить стиль, используя этот же метод ala
this.className='classname';
Если вы хотите сделать это в javascript-функции, вы можете использовать getElementByID, а не 'this'.
Ответ 7
Этот простой пример добавления <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
Ответ 8
Это мое решение добавить правило 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 }");
Ответ 9
Другим вариантом является использование 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" });
Это может быть не самый эффективный метод (я открыт для предложений о том, как улучшить это.:)), но он определенно работает.
Ответ 10
Здесь образец шаблона, который поможет вам начать работу
Требуется 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;}"
)
Ответ 11
Самый короткий вкладыш
// One liner function:
const addCSS = (s)=>((d,e)=>{ e = d.createElement("style");e.innerHTML = s;d.head.appendChild(e)})(document);
// Usage:
addCSS("body{ background:red; }")
Ответ 12
Здесь моя универсальная функция, которая параметризует селектор и правила CSS и необязательно принимает имя файла css (с учетом регистра), если вы хотите добавить его на конкретный лист (в противном случае, если вы не предоставите CSS filename, он создаст новый элемент стиля и добавит его к существующей голове. Он будет создавать не более одного нового элемента стиля и повторно использовать его для будущих вызовов функций). Работает с 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);
}
}
Ответ 13
Версия JavaScript (ES6)
Здесь доступно чистое и понятное решение для современных браузеров:
const css = document.createElement( 'style' );
css.textContent = '
a {
text-decoration: underline;
}
strong {
color: red;
}
';
document.head.appendChild( css );
Примечание. В этом решении используются литералы шаблонов, которые были введены в ES6. Это позволяет более интуитивно понятный способ добавления CSS.
Ответ 14
используйте .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>
Ответ 15
если вы знаете, что хотя бы один <style>
существует на странице, используйте эту функцию:
CSS=function(i){document.getElementsByTagName('style')[0].innerHTML+=i};
использование:
CSS("div{background:#00F}");