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>в голове htmlvar 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