Réponses:
Normalement, vous pouvez comparer le client[Height|Width]avec scroll[Height|Width]pour détecter cela ... mais les valeurs seront les mêmes lorsque le dépassement est visible. Ainsi, une routine de détection doit en tenir compte:
// 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;
}
Testé dans FF3, FF40.0.2, IE6, Chrome 0.2.149.30.
clientWidthet scrollWidthdiffère par 1px.
Essayez de comparer element.scrollHeight/ element.scrollWidthà 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
Je ne pense pas que cette réponse soit parfaite. Parfois, les paramètres scrollWidth / clientWidth / offsetWidth sont identiques même si le texte déborde.
Cela fonctionne bien dans Chrome, mais pas dans IE et Firefox.
Enfin, j'ai essayé cette réponse: détection des points de suspension de dépassement de texte HTML
C'est parfait et fonctionne bien n'importe où. Alors je choisis ceci, peut-être que vous pouvez essayer, vous ne décevrez pas.
Une autre façon est de comparer la largeur de l'élément avec la largeur de son parent:
function checkOverflow(elem) {
const elemWidth = elem.getBoundingClientRect().width
const parentWidth = elem.parentElement.getBoundingClientRect().width
return elemWidth > parentWidth
}
Il s'agit d'une solution javascript (avec Mootools) qui réduira la taille de la police pour s'adapter aux limites d'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');
}
Le CSS d'elHeader:
width:100%;
font-size:40px;
line-height:36px;
font-family:Arial;
text-align:center;
max-height:36px;
overflow:hidden;
Notez que le wrapper de elHeader définit la largeur de elHeader.