HTML 요소의 계산된 스타일을 가져오는 데는 항상 많은 호환성 문제가 있었습니다. 각 브라우저에는 약간의 차이가 있습니다. Firefox와 웹킷(Chrome, Safari)은 W3C 표준 방법인 getComputeStyle()을 지원하지만 IE6/7/ 8은 표준 방법을 지원하지 않지만 이를 구현하기 위한 개인 속성이 있습니다. currentStyle은 IE9와 Opera 모두 이를 지원합니다. 이 두 가지 방법과 속성을 사용하면 기본적으로 대부분의 요구 사항을 충족할 수 있습니다.
그러나 적응형 너비와 높이의 경우 currentStyle을 사용하여 계산된 값을 얻을 수 없습니다. auto만 반환할 수 있으며, getCompulatedStyle()은 계산된 값을 반환할 수 있습니다. 이 문제를 해결하는 방법은 여러 가지가 있습니다. 이전에 생각한 것은 clientWidth/clientHeight에서 패딩 값을 빼면 표준 방식을 지원하지 않는 브라우저에서도 계산된 너비와 높이를 얻을 수 있다는 것이었습니다. 며칠 전 Situ Zhengmei가 getBoundingClientRect() 메서드를 사용하여 페이지의 요소 위치를 가져온 다음 왼쪽에서 오른쪽을 빼면 너비가 되고 아래쪽에서 위쪽을 뺀 높이가 다른 방법을 사용하는 것을 보았습니다. 그의 코드를 약간 수정했는데 최종 코드는 다음과 같습니다.
var val = elem.currentStyle[스타일];
if( val === 'auto' && (style === "너비" || 스타일 === "높이") ){
var ect = elem.getBoundingClientRect();
if( 스타일 === "너비" ){
return ret.right - ret.left 'px';
}else{
return ret.bottom - ret.top 'px';
}
}
return val;
}();
};
// 이 메서드 호출
var test = document.getElementById( 'test' ),
// 계산된 너비 가져오기
tWidth = getStyle( test, 'width' );
새로운 질문입니다. 요소의 너비 또는 높이가 em 또는 % 단위를 사용하는 경우 getCompulatedStyle()에서 반환된 값은 자동으로 em 또는 %를 px 단위로 변경하지만 currentStyle은 그렇지 않습니다. 글꼴 크기인 경우 em을 단위로 하고 Opera에서는 0em을 반환합니다. Opera는 정말 무섭습니다!
나중에 사용 중에 예상치 못한 호환성 문제를 발견했습니다. 오늘은 원본 코드를 최적화하고 몇 가지 일반적인 호환성 문제를 다루었습니다.
JavaScript에서 "-"(대시 또는 하이픈)은 빼기 기호를 나타내며 CSS에서는 padding-left, 글꼴 크기 등과 같은 많은 스타일 속성에 이 기호가 있으므로 다음과 같은 경우 코드가 javascript에 나타나면 오류입니다.
float의 경우 JavaScript에서 예약어입니다. JavaScript에서 요소의 float 값을 설정하거나 가져오는 다른 방법이 있습니다. 표준 브라우저에서는 cssFloat이고 IE6/7/8에서는 다음과 같습니다. 스타일플로트.
상단, 오른쪽, 하단 및 왼쪽에 명시적인 값이 없으면 일부 브라우저는 이러한 값을 얻을 때 자동을 반환합니다. 자동 값은 합법적인 CSS 속성 값이지만 결코 우리가 원하는 것은 아닙니다. 결과는 0px이어야 합니다.
IE6/7/8에서 요소의 투명도를 설정하려면 filter:alpha(opacity=60)와 같은 필터를 사용해야 합니다. 표준 브라우저의 경우 IE9에서는 두 가지 쓰기 방법을 모두 직접 지원합니다. 요소의 투명도를 얻기 위한 호환성도 구현되었습니다. 불투명도를 사용하는 한 모든 브라우저 요소의 투명도 값을 얻을 수 있습니다.
IE6/7/8에서 요소의 너비와 높이를 구하는 방법은 이전 글에서 소개했으므로 여기서는 반복하지 않겠습니다. 또 한 가지 주목할 점은 요소의 스타일이 스타일 인라인을 사용하여 작성되었거나 JavaScript를 사용하여 스타일 속성이 설정된 경우 다음 방법을 사용하여 요소의 계산된 스타일을 가져올 수 있다는 것입니다.
이 방법은 getCompulatedStyle 또는 currentStyle에서 속성 값을 읽는 것보다 빠르며 먼저 사용해야 합니다. 물론 전제 조건은 인라인 작성으로 스타일을 설정하는 것입니다(자바스크립트를 사용하여 인라인 스타일을 설정하는 것도 설정됩니다). 최적화된 최종 코드는 다음과 같습니다.