2009-11-02 3 views
1

IE8이 CSS 선택기를 삭제하는 것처럼 보입니다. 나는 이것을 믿기가 어렵다고 생각하지만, 무슨 일이 일어나고 있는지 알 수 없다. 내가 통해 IE8에서 파일을 검사 할 때 내장 된 개발자 도구, 선언이 수정됩니다, 그러나IE8은 쿼크 모드에서 여러 클래스를 허용하지 않습니까?

#srp tr.objectPath.hover td { 
    border-top:none; 
} 

:하십시오 .css 파일에서

나는이 선언이

#srp TR.hover TD { 
    border-top:medium none; 
} 

룰의 변경이나 재 작성에 대해서는 신경 쓰지 않지만 'objectPath '를 삭제하는 것은 실제보다 더 광범위하게 룰을 대상으로하기 때문에 실제 문제입니다.

이 페이지는 Quirks 모드이며 계속 유지해야합니다.

어떤 아이디어가 있습니까?

감사합니다.

+0

제쳐두고, 호버 (pseudo) 클래스는 쿼크 모드 (앵커 제외)에서 작동하지 않습니다. – plodder

답변

1

tr.objectPath.hover은 가상 클래스 hover을 사용하려는 경우 올바른 구문이 아닙니다. 올바른 구문은 콜론 (예 : tr.objectPath:hover)입니다. 기계가 코드를 읽을 때 tr의 클래스 이름으로 objectPath을 읽습니다. 그러나 hover이되면 이전 클래스 이름을 없애고 hover 클래스로 바꿉니다 (실제로 어떤 요소가 있든 없든간에). 그 클래스가 아니라면.이 경우에 나는 :hover의 자식을 참조하여 무엇을하려고하는지 알지 못합니다.

실제로는 hover을 클래스로 사용하고 있습니다. (코드를 읽는 사람들이 혼란 스러울 수 있으므로 권장하지 않는) 이름을 사용하고 CSS를 trtd 어린이 (objectPathhover 클래스)에 적용하려면 CSS를 새로 만들면 cl 두 클래스의 요소를 대신 사용하는 (즉, #srp tr.newClass td).

EDIT : 더 자세히 살펴보면, IE에서 (아직) a (nother) known bug 인 것으로 보입니다. 나는 IETester에서 그것을 테스트했으며 IE의 모든 버전에 존재하는 것으로 보인다. 내가 마지막으로 볼 수있는 유일한 해결책은 매우 지저분합니다.

먼저 다른 사람에게 액세스 할 수 없으므로 CSS에서 JavaScript를 사용해야합니다. 이것은 possible but very prone to bugs입니다.

둘째, 매개 변수로 여러 클래스 이름을 사용할 수있는 해당 JavaScript에서 getElementsByClass 함수를 만들어야합니다. 이것은 very sizable chunk of code입니다.

마지막으로이 코드를 used only by IE으로 지정하면 다른 브라우저 사용자가이 모든 문제의 잠재적 인 문제를 처리하지 않아도됩니다.

명확히하기 위해 나는 이것을으로하지 않는 것이 좋습니다. 대신 HTML 소스 코드에 액세스 할 수있는 사람에게 연락을 취하여 두 클래스에 속한 tr 요소에 objectPathhover 클래스를 추가하는 훨씬 간단한 수정을 적용 할 수 있도록 (실제로 파트너 관계로 작업하고 있다고 가정) 제안 할 것입니다. 심지어는 td 명의 자녀에게 적용됩니다.

+0

제안 사항은 작동하지만 제어 할 수없는 상태에서 마크 업을 생성하는 코드를 변경해야합니다. IE가 선언을 다시 쓰는 이유는 무엇입니까? –

+0

나는 이것에 대해 좀 더 많은 연구를 해본 결과, HTML 소스 코드에 액세스 할 수있는 사람이 문제를 해결할 수 있다고 결론을 내렸다. – sfarbota

+0

@Tim Sheiner : IE는 선언문의 정식 양식 (이해할 수있는대로)을 보여줄 가능성이 큽니다. – Powerlord

0

신고서에 잘못된 구문이있는 것 같지만 정확히 무엇을하고 있는지 말할 수 없습니다. 마우스를 올리거나 실제 마우스를 가리키는 클래스가 있습니까?

상태를가는 경우, 시도 :

#srp tr.objectPath:hover td { 
    ... 
} 

를 다른 클래스가있는 경우, 당신은 2 개 개의 별도 선언해야합니다 : 쿼크 모드 IE 8에서는

#srp tr.objectPath td { 
    ... 
} 

#srp tr.hover td { 
    ... 
} 
+0

위대한 마음은 모두 하하라고 생각합니다. – sfarbota

+0

실제로 'hover'클래스가 있습니다. 당신이 설명하는대로 두 클래스를 사용하면 IE가하는 것처럼 본질적으로 동일하지 않으므로 도움이되지 않습니다. 클래스의 부모가있는 td 대신에 classname .hover를 가진 모든 td의 스타일을 적용하는 것입니다. objectPath 및 .hover. –

+0

알고있는 한 CSS는 그렇게 작동하지 않습니다. 별도의 클래스를 선언하고 겹치는 부분이 있거나 컨트롤 트리 (.object, .hover 또는 그 반대로)를 캐스케이드 할 수 있지만 두 규칙이 모두 존재할 때만 적용되는 규칙은 할 수 없습니다. 귀하의 경우, 제 3의 클래스를 만들어야하는 것처럼 들립니다. –

2

페이지를 렌더링하고 취급 DOM 5.5가 IE처럼 렌더링됩니다. 그것이 Quirks Mode의 IE 8이 여러 클래스를 무시하는 이유입니다. Internet Explorer 8의 버그가 아니므로 페이지를 구문 분석하고 올바르게 렌더링하려면 표준 모드에서 페이지를 렌더링하도록 적절한 DOCTYPE을 설정해야합니다.