Respostas:
Normalmente, você pode comparar client[Height|Width]
com com scroll[Height|Width]
para detectar isso ... mas os valores serão os mesmos quando o estouro estiver visível. Portanto, uma rotina de detecção deve explicar isso:
// 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;
}
Testado em FF3, FF40.0.2, IE6, Chrome 0.2.149.30.
clientWidth
e scrollWidth
difere por 1px.
Tente comparar element.scrollHeight
/ element.scrollWidth
para 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
Não acho que essa resposta seja perfeita. Às vezes, a scrollWidth / clientWidth / offsetWidth é a mesma, mesmo que o texto esteja excedendo.
Isso funciona bem no Chrome, mas não no IE e Firefox.
Por fim, tentei esta resposta: Detecção de reticências de transbordamento de texto HTML
É perfeito e funciona bem em qualquer lugar. Então eu escolho isso, talvez você possa tentar, não irá decepcionar.
Outra maneira é comparar a largura do elemento com a largura do pai:
function checkOverflow(elem) {
const elemWidth = elem.getBoundingClientRect().width
const parentWidth = elem.parentElement.getBoundingClientRect().width
return elemWidth > parentWidth
}
Esta é uma solução javascript (com Mootools) que reduzirá o tamanho da fonte para se ajustar aos limites do 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');
}
O CSS do elHeader:
width:100%;
font-size:40px;
line-height:36px;
font-family:Arial;
text-align:center;
max-height:36px;
overflow:hidden;
Observe que o invólucro do elHeader define a largura do elHeader.