2015-01-29 6 views
1

어떤 브라우저가 페이지에 액세스하는지에 따라 두 가지 스타일 시트 중 하나를로드해야하는 상황에 있습니다. IE 이외의 다른 항목이 있으면
"새"스타일 시트
IE는> = 9는 "새로운"스타일 시트를로드하는 경우
IE < 9 다음 이전 스타일!에 대한 조건부 주석! 이전 버전의 Firefox 용 조건부 설명

를로드 할 경우에 그것을 달성하기 위해 사용되는 코드입니다 :

<!--[if lt IE 9]> 
<link type="text/css" rel="stylesheet" href="/stylesheets/old.css"> 
<![endif]--> 
<!--[if gte IE 9]> 
<link type="text/css" rel="stylesheet" href="/stylesheets/new.css"> 
<!--<![endif]--> 
<!--[if !IE]><!--> 
<link type="text/css" rel="stylesheet" href="/stylesheets/new.css"> 
<!--<![endif]--> 

이 모두에서 잘 작동 모드 ern 브라우저 및 이전 버전의 IE는 이전 스타일을 올바르게로드합니다. 그러나 이전 버전의 Firefox (3.6) 및 잠재적으로 다른 CSS에서는 새 CSS가로드되지 않고 -->이 웹 페이지에 인쇄됩니다. 이는 IE! <!-->이 추가되어야하는 라인 때문입니다. 그렇지 않으면 IE 11이 스타일 시트를로드하지 않습니다. Firefox 3.6에서 제대로 작동합니다.

다양한 브라우저 및 버전에서 제대로 작동하려면 이러한 조건부 주석을 설정하는 적절한 방법은 무엇입니까?

+0

그래, 아주 특이한 것 같습니다. 나는 그 행동을 재현 할 수 있었다. – BoltClock

+0

최신 브라우저의 경우에는 코멘트가 없어야합니다. 그래서 new.css 스타일 시트를 제일 먼저 넣으십시오. [if ....] .. ' – Caelea

+0

@Caelea : 주석 구문은 IE에서 작동하기 위해서 필요합니다. 유효성을 검사 할 마크 업. 주석은 다른 브라우저에서 잘 읽는 방식으로 설정됩니다. 코드의 구문 강조 표시를 살펴보면 코드도 볼 수 있습니다. – BoltClock

답변

2

저는 <!-- 구분 기호 중 하나에 해당하는 것으로 생각합니다. 특히 해당 <![endif]--> 앞에 오는 IE9 조건문에있는 것입니다. <!--[if gte IE 9]> 주석은 아직 종료되지 않았으므로 HTML에 주석을 중첩 할 수 없기 때문에 다른 <!-- 구분 기호를 사용하는 것은 실제로 유효하지 않습니다. Firefox의 현재 버전이 예상대로 작동하지만 Firefox 3.6이 다르게 처리 한 이유가 있다면 놀라지 않을 것입니다.

당신은 그 제거하면 제대로 파이어 폭스 3.6 동작합니다이 :

<!--[if lt IE 9]> 
<link type="text/css" rel="stylesheet" href="/stylesheets/old.css"> 
<![endif]--> 
<!--[if gte IE 9]><!--> 
<link type="text/css" rel="stylesheet" href="/stylesheets/new.css"> 
<!--<![endif]--> 
:

<!--[if lt IE 9]> 
<link type="text/css" rel="stylesheet" href="/stylesheets/old.css"> 
<![endif]--> 
<!--[if gte IE 9]> 
<link type="text/css" rel="stylesheet" href="/stylesheets/new.css"> 
<![endif]--> 
<!--[if !IE]><!--> 
<link type="text/css" rel="stylesheet" href="/stylesheets/new.css"> 
<!--<![endif]--> 

사실, 당신과 같이 당신의 IE9 조건 선언문 <!--> 치료를 제공하여 코드를 많이 건조기를 만들 수 있습니다

이렇게하면 "새로운"스타일 시트에 대한 추가 참조가 없어지면서 모든 브라우저와 IE9에서 액세스 할 수 있습니다. 9 이상의 다른 버전의 IE는 실제로 더 이상 조건부 주석을 지원하지 않으므로 더 멀리 가서 gte IE 9IE 9으로 변경하면 다른 브라우저와 함께 최신 버전의 IE에서 계속 작동합니다. 물론, 명확성을 위해 그 방법을 유지하는 것은 환영합니다. 나는 그것이 이유를 인의 <!--> 최종 구분 -->보다는 > 다음에 <!-- 다음 <!로 해석됩니다 주석 내에서 <!-- 순서를 가지고 유효하지 있다고 말했다 있지만 보조 노트에

, 조금 괜찮아.