[javascript] Javascript로 CSS를 어떻게 추가합니까?

strong { color: red }Javascript를 사용하여 CSS 규칙을 어떻게 추가 합니까?



답변

DOM 레벨 2 CSS 인터페이스 ( 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 메소드와 비교하여 이론상 이점이 있습니다. innerHTML에 특수 HTML 문자를 넣을 까 걱정할 필요는 없지만 실제로는 스타일 요소가 레거시 HTML에서 CDATA이고 ‘<‘ 그리고 ‘&’는 스타일 시트에서 거의 사용되지 않습니다.

다음과 같이 스타일 시트를 추가하기 전에 스타일 시트가 필요합니다. 외부, 내장 또는 비어있는 기존 활성 스타일 시트 일 수 있습니다. 존재하지 않는 경우 현재 생성하는 유일한 표준 방법은 createElement를 사용하는 것입니다.


답변

간단하고 직접적인 접근 방식은 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)


답변

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);
}


답변

다음 은 새 텍스트 노드를 만드는 대신 사용할 수 있다는 점을 고려 하여 약간 업데이트 된 Chris Herring 솔루션 버전입니다 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 );
}


답변

최단 하나의 라이너

// One liner function:
const addCSS = s =>(d=>{d.head.appendChild(d.createElement("style")).innerHTML=s})(document);

// Usage: 
addCSS("body{ background:red; }")


답변

요소별로 요소 또는 클래스 속성을 추가 할 수 있습니다.

예를 들면 다음과 같습니다.

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

this.style.background, this.style.font-size 등을 수행 할 수있는 곳.이 동일한 방법을 사용하여 스타일을 적용 할 수도 있습니다.

this.className='classname';

자바 스크립트 함수 에서이 작업을 수행하려면 ‘this’대신 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

소스 동적 스타일-JavaScript를 사용하여 CSS 조작