Câu trả lời:
Thông thường, bạn có thể so sánh client[Height|Width]
với scroll[Height|Width]
để phát hiện điều này ... nhưng các giá trị sẽ giống nhau khi hiển thị tràn. Vì vậy, một thói quen phát hiện phải tính đến điều này:
// Determines if the passed element is overflowing its bounds,
// either vertically or horizontally.
// Will temporarily modify the "overflow" style to detect this
// if necessary.
function checkOverflow(el)
{
var curOverflow = el.style.overflow;
if ( !curOverflow || curOverflow === "visible" )
el.style.overflow = "hidden";
var isOverflowing = el.clientWidth < el.scrollWidth
|| el.clientHeight < el.scrollHeight;
el.style.overflow = curOverflow;
return isOverflowing;
}
Đã thử nghiệm trong FF3, FF40.0.2, IE6, Chrome 0.2.149.30.
clientWidth
và scrollWidth
khác bằng 1px.
Hãy thử so sánh element.scrollHeight
/ element.scrollWidth
với element.offsetHeight
/element.offsetWidth
http://developer.mozilla.org/en/DOM/element.offsetWidth
http://developer.mozilla.org/en/DOM/element.offsetHeight
http://developer.mozilla.org/en/DOM/element. scrollWidth
http://developer.mozilla.org/en/DOM/element.scrollHeight
Tôi không nghĩ câu trả lời này là hoàn hảo. Đôi khi scrollWidth / clientWidth / offsetWidth giống nhau mặc dù văn bản bị tràn.
Điều này hoạt động tốt trong Chrome, nhưng không phải trong IE và Firefox.
Cuối cùng, tôi đã thử câu trả lời này: Phát hiện dấu chấm lửng tràn văn bản HTML
Nó hoàn hảo và hoạt động tốt ở mọi nơi. Vì vậy, tôi chọn cái này, có lẽ bạn có thể thử, bạn sẽ không thất vọng.
Đây là một giải pháp javascript (với Mootools) sẽ giảm kích thước phông chữ để phù hợp với giới hạn của elHeader.
while (elHeader.clientWidth < elHeader.scrollWidth || elHeader.clientHeight < elHeader.scrollHeight) {
var f = parseInt(elHeader.getStyle('font-size'), 10);
f--;
elHeader.setStyle('font-size', f + 'px');
}
CSS của elHeader:
width:100%;
font-size:40px;
line-height:36px;
font-family:Arial;
text-align:center;
max-height:36px;
overflow:hidden;
Lưu ý trình bao bọc của elHeader đặt chiều rộng của elHeader.