>  기사  >  웹 프론트엔드  >  CSS 스타일 시트 파일을 동적으로 추가하는 JS 함수_기본 지식

CSS 스타일 시트 파일을 동적으로 추가하는 JS 함수_기본 지식

WBOY
WBOY원래의
2016-05-16 17:46:281535검색

먼저 기능을 제공하십시오.

코드 복사 코드는 다음과 같습니다.

varaddSheet=function(){
vardoc,cssCode ;
if(arguments.length==1){
doc=document;
cssCode=arguments[0]
}elseif(arguments.length==2){
doc=arguments [0];
cssCode=arguments[1];
}else{
alert("addSheet 함수는 최대 2개의 매개변수를 허용합니다!"); "v1" ){//자동 변환 투명도 기능을 추가하세요. 사용자는 W3C 투명 스타일만 입력하면 자동으로 IE의 투명 필터
vart=cssCode.match(/opacity:(d?. d );/) ;
if(t!=null){
cssCode=cssCode.replace(t[0],"filter:alpha(opacity="parseFloat(t[1])*100 ") ")
}
}
cssCode=cssCode " ";//Firebug에서 쉽게 볼 수 있도록 끝에 개행 문자를 추가합니다.
varheadElement=doc.getElementsByTagName("head")[0];
varstyleElements=headElement.getElementsByTagName("style")
if(styleElements.length==0){//스타일이 그렇지 않은 경우 존재하는 요소가 생성됩니다
if(doc.createStyleSheet){//ie
doc.createStyleSheet()
}else{
vartempStyleElement=doc.createElement('style');//w3c
tempStyleElement.setAttribute("type","text/css");
headElement.appendChild(tempStyleElement)
}
}
varstyleElement=styleElements[0]; styleElement .getAttribute("media");
if(media!=null&&!/screen/.test(media.toLowerCase())){
styleElement.setAttribute("media","screen"); 🎜 >}
if(styleElement.styleSheet){//ie
styleElement.styleSheet.cssText =cssCode;
}elseif(doc.getBoxObjectFor){
styleElement.innerHTML =cssCode;//Firefox support innerHTML
}else{
styleElement.appendChild(doc.createTextNode(cssCode))
}
}


에 직접 스타일시트 문자열 추가 add .js 파일은 일부 CSS 스타일을 문서에 동적으로 도입합니다. 일부 짧은 CSS 코드의 경우



코드 복사
와 같이 스타일 메서드를 호출할 수 있습니다. varddd=document.getElementById("ddd"); ddd.style.border="1pxsolidred";

상관없습니다. 더 긴 경우:



코드 복사
코드는 다음과 같습니다. varddd=document.getElementById ("ddd"); ddd.style.cssText="border:1pxsolidred;color:#000;Background:#444;float:left";

개인적으로 후자를 좋아합니다. . 전자에는 심각한 호환성 문제가 있기 때문입니다. 예를 들어 IE에서는 float 스타일이 styleFloat이고 Firefox와 같은 W3C 표준 브라우저에서는 cssFloat입니다. 그리고 cssText는 보편적입니다.
매우 긴 경우에는 CSS 파일을 동적으로 가져올 수 있습니다. 예를 들어



코드 복사
코드는 다음과 같습니다. functionaddSheetFile(path){ varfileref=document .createElement("link")
fileref.rel="stylesheet";
fileref.type="text/css";
fileref.href=path
fileref. media="screen" ;
varheadobj=document.getElementsByTagName('head')[0];
headobj.appendChild(fileref);
}


IE에서는 조금 번거롭습니다. 나는 항상 그것을 지원하는 브라우저의 기본 기능을 사용해 왔으며 바이너리 코드를 직접 사용하는 것이 가장 효율적입니다.



코드 복사
코드는 다음과 같습니다. varoStylesheet=document.createStyleSheet(sURL,iIndex );

createStyleSheet의 두 매개변수는 선택사항입니다.
하지만 우리 스타일이 특정 페이지에만 고유하고 관리자만 사용할 수 있고 페이지의 해당 부분이 동적으로 생성된다면 처음부터 도입해야 할까요? 로드하려면 특수 파일을 만들어야 합니까? 가장 좋은 방법은 이러한 스타일을 동적 스크립트와 함께 묶는 것입니다. 이 기능은 이러한 목적으로 개발되었습니다.
솔직히 말해서 원래 서식 있는 텍스트 편집기용으로 개발되었습니다. 우리 모두 알고 있듯이 서식 있는 텍스트 입력 상자를 사용하는 가장 인기 있는 방법은 입력할 내용을 iframe에 넣는 것입니다. 여기에는 두 가지 유형의 문서가 포함됩니다. 하나는 메인 페이지의 문서이고 다른 하나는 문서입니다. iframe의 iframe 문서에도 호환성 문제가 있습니다. 다음을 수행할 수 있습니다.
variframe=document.createElement('iframe');//편집용 리치텍스트 편집기 생성
variframeDocument=iframe.contentDocument||iframe.contentWindow.document
......
 글쎄, 너무 멀다. 전체적으로 이 두 문서에 대한 기능의 초기 판단이 준비됩니다. 관련된 iframe이 없으면 하나의 매개변수만 전달하면 됩니다. 마지막 매개변수는 항상 CSS 문자열입니다.
그러면 styleSheet 요소를 동적으로 생성하고 이 요소에 CSS 문자열을 추가하는 문제가 있습니다. 물론 현 단계에 있는 것이 있다면 기성품을 사용하는 것은 물론이다. DOM 요소가 많을수록 브라우저에 부담이 커집니다. document.styleSheets 메소드를 생각합니다. 스타일 요소 및 링크 요소를 포함한 컬렉션을 반환하며 다음과 같은 호환성 문제도 포함합니다.
코드 복사 코드

"http://www.w3.org/TR/xhtml1/DTD /xhtml1-transitional.dtd">
<%# IE8에서 IE7과 같은 웹페이지를 렌더링하도록 합니다. -%>

<%# --기본적으로 모든 링크가 이 창에서 열립니다-%>
<%=h(yield(:title))||controller .action_name%>
<%=stylesheet_link_tag"screen","button","style"%> ;

<--[ifltIE8]> >
%=javascript_tag"window._token='#{form_authenticity_token}'"ifActionController::Base .allow_forgery_protection%>
<%=javascript_include_tag:defaults%>




IE는 6을 반환하고 W3C 브라우저는 이를 테스트합니다. 5. 따라서 거부되었습니다. 그리고 외부 링크가 아닌 스타일 요소만 사용합니다. 판단의 두 번째 부분은 헤드의 스타일 요소에 대한 것입니다. 존재하지 않으면 새로 만듭니다. 그런 다음 첫 번째 스타일 요소에 CSS 문자열을 추가하기만 하면 됩니다.
다음으로 안전 잠금 장치를 추가해야 합니다. 왜냐하면 media="print"일 때 정의된 효과는 페이지가 인쇄될 때만 적용되기 때문입니다. 첫 번째 스타일 요소의 미디어 값이 화면과 달라지는 것을 방지하기 위해 변경해야 합니다.



코드 복사

코드는 다음과 같습니다. varstyleElement=styleElements[0] varmedia= styleElement.getAttribute("media"); if(media!=null&&!/screen/.test(media.toLowerCase())){ styleElement.setAttribute("media","screen" );
}


첨부된 내용은 언론의 일부 지침입니다.
화면(기본값), 컴퓨터 화면에 제출
프로젝터에 제출
청각, 스피커
점자; 양각 문자 촉각 감지 장치;
 tty, 텔레타이프라이터(고정 글꼴 사용)
 tv, 텔레비전 세트
 모든 출력 장치.
마지막으로 추가된 질문은 이것입니다. 브라우저에는 IE, Firefox 및 기타 브라우저의 세 가지 유형이 있습니다. 브라우저를 결정하는 데에도 고유한 개인 속성이나 메서드가 사용됩니다. 예를 들어 styleSheet는 IE에서만 사용되고 getBoxObjectFor는 Firefox에서만 사용됩니다(물론 (/firefox/.test(navigator.userAgent.toLowerCase()))를 사용할 수도 있습니다). 일반적으로 DOM 작업은 가장 시간이 많이 걸립니다. 프라이빗으로 사용이 가능하다면
사용방법 :



코드복사


코드는 다음과 같습니다

addSheet("
.RTE_iframe{너비:600px;높이:300px;}
.RTE_toolbar{너비:600px;}
.color_result{너비:216px;}
. color_view{너비:110px;높이:25px;}
.color_code{text-align:center;font-weight:700;color:blue;font-size:16px;}
div.table{너비:176px ;position:absolute;padding:1px;}
div.tabletd{font-size:12px;color:red;text-align:center;}
");*/
고객 서비스 비교 51js Guoguo 스크립트는 더 짧지만 여러 스타일 요소를 생성할 수 있고 효율성 문제도 있습니다... 결국 이 스크립트는 원래 서식 있는 텍스트 편집용으로 개발했는데 충분히 강력하지 않습니다!
/*
동적으로 스타일 시트를 추가하기 위한 규칙
*/
iCSS={add:function(css){
varD=document,$=D.createElement('style');
$.setAttribute("type","text/css");
$.styleSheet&&($.styleSheet.cssText=css)||
$.appendChild(D.createTextNode(css));
D.getElementsByTagName('head')[0].appendChild($);
}};
iCSS.add("
.dhoooListBox,.dhoooListBoxli{margin:0;padding:0 ;list-style-type:none;font-size:12px;cursor:default}
.dhoooListBox{border:1pxsolid#aaa;width:180px; background:#eee;height:200px;overflow:auto;float: 왼쪽}
.dhoooListBoxli{margin:5px;line-height:24px; background:url(images/smilies/time.gif)no-repeat060%;padding-left:25px;color:#555;}
.dhoooListBoxli.selected{ background-color:#FFCC33}
");
마지막으로 몇 가지 관련 메서드를 추가합니다:
vargetClass=function(ele){
returnele.className.replace(/s /,'').split('');
};
varhasClass=function(ele,cls){
returnele.className.match(newRegExp('(s|^)' cls '( s|$)'));
}
varaddClass=function(ele,cls){
if(!this.hasClass(ele,cls))ele.className ="" cls; }
varremoveClass=function(ele,cls){
if(hasClass(ele,cls)){
varreg=newRegExp('(s|^)' cls '(s|$)');
ele.className=ele.className.replace(reg,'')
}
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.