그것은 나에게 나타납니다 크롬, 사파리 (시작이 가능하기 때문에)를 head
에서 style
및 link
요소의 순서를 존중 파이어 폭스의 최신 버전을 포함한 모든 최신 브라우저; 자바 스크립트를 사용하여 런타임 중에 동적으로 생성되고 추가 된 경우에도 마찬가지입니다.평가 순서가
예를 들어 여기 red.css
과 green.css
은 모두 본문 배경색을 지정합니다. 본체 배경 레드 제 세트는 2 세트 녹색 :
<head>
<!-- other code -->
<link rel="stylesheet" href="red.css" type="text/css">
<link rel="stylesheet" href="green.css" type="text/css">
</head>
결과 green.css
red.css
는 뒤에 배치하고 나중에 평가되므로 신체의 배경색이 녹색이다.
요소의 순서는 link
요소가 동적으로 만들어져 머리에 삽입 된 경우에도 유지됩니다. 예를 들어, green.css
을로드하는 link
요소를 동적으로 생성하면 red.css
뒤에 삽입 된 경우에만 본문 배경색이 녹색으로 설정됩니다.
그러나이 점을 고려하지 않는 브라우저는 Internet Explorer (적어도 IE 7-9는 아닙니다)입니다. IE에서는 가장 최근에 추가 된 link
또는 style
요소가 이미 평가 된 모든 최상위에서 평가됩니다. 그것은 런타임 동안 추가 될 때 트리 순서를 존중하지 않습니다.
비표준 동작을 존중합니까? 아니면 Internet Explorer 버그입니까? Internet Explorer에서이 문제를 어떻게 해결할 수 있습니까?
기존의 모든 link
및 style
요소를 동적으로 제거하고 같은 트리 순서로 다시 추가하는 것이 좋습니다. 즉 평가할 순서입니다.
어떤 통찰력이라도 대단히 감사하겠습니다.
UPDATE 여기
요청한 자세한 코드 샘플이다 red.css
의
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="red.css" type="text/css"> <!-- sets red -->
</head>
<body>
<script type="text/javascript">
setTimeout(function() {
// IE7-8 does not support referencing document.head
var head = document.getElementsByTagName("head")[0];
var link = document.createElement("link");
link.setAttribute("href", "green.css");
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");
// All modern browesers will leave the background
// color red, except IE will set it green.
head.insertBefore(link, head.firstChild);
// Now comment out the above line and try adding the link
// using this instead. All modern browsers (including IE)
// will set the body background color green after two seconds.
// IE seems to always evaluate the last dynamically added link.
// head.appendChild(link);
}, 2000);
</script>
</body>
</html>
내용량 : green.css
의
body { background-color: red; }
내용량 :
body { background-color: green; }
문서에 두 번째 링크 만있는 경우 첫 번째 문서는 두 번째 문서보다 먼저 동적으로 추가됩니다. IE에서 첫 번째 링크가 우선 적용됩니까? 나는. "캐스 캐 이드 (cascade)"되지 않았습니까? 테스트 케이스를 제공 할 수 있습니까? – RobG
@RobG, 맞습니다. 내 모든 테스트에서 이것은 동적으로'link' 엘리먼트를 생성 할 때 IE의 경우입니다. 사실상 다른 모든 브라우저는 게재 순위를 준수합니다. – Peter
IE9에서 문제가 지속되는 것처럼 보입니다. 필요한 순서대로 모든 스타일 시트를 동적으로 추가한다는 아이디어는 아마도 여러분이 할 수있는 최선의 방법 일 것입니다. – RobG