ตรวจสอบว่าเนื้อหาขององค์ประกอบ HTML ล้นหรือไม่


139

ฉันสามารถใช้ JavaScript เพื่อตรวจสอบ (โดยไม่คำนึงถึงแถบเลื่อน) ได้หรือไม่หากองค์ประกอบ HTML ล้นเนื้อหา ตัวอย่างเช่น div ยาวที่มีขนาดเล็กคงที่คุณสมบัติ overflow ตั้งค่าให้มองเห็นได้และไม่มีแถบเลื่อนบนองค์ประกอบ

คำตอบ:


222

โดยปกติคุณสามารถเปรียบเทียบclient[Height|Width]กับscroll[Height|Width]เพื่อตรวจจับสิ่งนี้ ... แต่ค่าจะเท่ากันเมื่อมองเห็นล้น ดังนั้นขั้นตอนการตรวจจับต้องคำนึงถึงสิ่งนี้:

// 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;
}

ทดสอบใน FF3, FF40.0.2, IE6, Chrome 0.2.149.30


ขอบคุณ Shog9 ... รูทีนการตรวจจับคือฉันคิดว่าฉันต้องการอะไรเพราะฉันเล่นล้น (ซ่อน / มองเห็นได้)

ฉันมีคำถามคล้าย ๆ กันนี้ที่stackoverflow.com/questions/2023787/…ซึ่งฉันกำลังพยายามหาว่าส่วนใดขององค์ประกอบที่มีอยู่มีส่วนเกินซ่อนอยู่
slolife

2
ฉันสงสัยว่าสิ่งนี้จะทำให้เกิดการสั่นไหวสั้น ๆ หรือไม่เมื่อสไตล์เปลี่ยนไปชั่วครู่
Stijn de Witt

3
+1. สิ่งนี้ใช้ได้กับเบราว์เซอร์ที่ทันสมัย ​​(รวมถึง Chrome 40 เป็นอย่างน้อยและเบราว์เซอร์เวอร์ชันปัจจุบันอื่น ๆ ตั้งแต่เวลาที่เขียน)
L0j1k

1
ไม่ทำงานใน MS Edge บางครั้งเนื้อหาไม่ได้ล้น แต่clientWidthและscrollWidthแตกต่างโดย 1px
jesper


3

ฉันไม่คิดว่าคำตอบนี้จะสมบูรณ์แบบ บางครั้ง scrollWidth / clientWidth / offsetWidth เหมือนกันแม้ว่าข้อความจะล้น

ใช้งานได้ดีใน Chrome แต่ใช้ไม่ได้กับ IE และ Firefox

ในที่สุดฉันลองใช้คำตอบนี้: การตรวจจับจุดไข่ปลา HTML text-overflow

มันสมบูรณ์แบบและใช้งานได้ดีทุกที่ ฉันจึงเลือกสิ่งนี้บางทีคุณอาจลองดูคุณจะไม่ผิดหวัง


ฉันขอแนะนำให้ลบหรือยกเลิกการให้คะแนนคำตอบนี้เนื่องจากมีข้อบกพร่องบางประการ ฉันใช้สิ่งนี้ในตอนแรก แต่มันไม่สามารถทำงานได้อย่างสมบูรณ์แบบกับสไตล์ css พิเศษบางอย่าง
zjalex

1

อีกวิธีหนึ่งคือเปรียบเทียบความกว้างขององค์ประกอบกับความกว้างของผู้ปกครอง:

function checkOverflow(elem) {
    const elemWidth = elem.getBoundingClientRect().width
    const parentWidth = elem.parentElement.getBoundingClientRect().width

    return elemWidth > parentWidth
}

0

ด้วย jQuery คุณสามารถทำได้:

if ( $(".inner-element").prop('scrollHeight') > $(".inner-element").height() ) {

    console.log("element is overflowing");

} else {

    console.log("element is not overflowing");

}

เปลี่ยนเป็น.prop('scrollWidth')และ.width()ถ้าจำเป็น


-2

นี่คือโซลูชัน javascript (พร้อม Mootools) ที่จะลดขนาดฟอนต์ให้พอดีกับขอบเขตของ 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 ของ elHeader:

    width:100%;
    font-size:40px;
    line-height:36px;
    font-family:Arial;
    text-align:center;
    max-height:36px;
    overflow:hidden;

สังเกตว่า wrapper ของ elHeader ตั้งค่าความกว้างของ elHeader

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.