Потребности:
Мне нужен триггер, когда текстовое содержимое кнопки выходит за пределы ширины кнопки.
Вопрос:
Есть ли какой-нибудь краткий / умный способ определить, когда textContent переполнился своим родителем?
ОБНОВЛЕНО: Похоже, это решит мою проблему.
HTML:
<div class = "container">
<button>a normal button</button>
<button>tiny</button>
<button class = "parent">
<div class = "child">a rhhh, really wide button lskdfjlasdkfj lksjd flaksjd flaskdjf lkj</div>
</button>
</div>
CSS:
.container {
display: inline-grid;
grid-template-columns: 1fr 1fr 1fr;
grid-column-gap: 20px;
}
.parent {
overflow: hidden;
}
button {
white-space: nowrap;
}
JS:
const child = document.querySelector('.child');
console.info(child.scrollWidth, 'child');
const parent = document.querySelector('.parent');
console.info(parent.clientWidth,'parent');
Примечание: Я не могу полагаться на полосы прокрутки. (ОБНОВЛЕННАЯ сортировка с использованием полос прокрутки)
возможно, один из них может оказаться полезным: google.com/…
Я нашел эту тему, которая может помочь: stackoverflow.com/questions/6406843/…
Не уверен, насколько это надежно, и это разбивает макет, но у меня это сработало:
function isButtonOverflowing ( button ) {
var oldHeight = button.offsetHeight;
button.style.whiteSpace = 'normal';
var newHeight = button.offsetHeight;
button.style.whiteSpace = '';
return oldHeight !== newHeight;
}
На основе ссылки, которую я предоставил вам в своем комментарии, вот рабочий фрагмент:
$("button").each(function() {
if ($(this)[0].scrollWidth > $(this).innerWidth()) {
console.info("Overflow!");
} else {
console.info("It's ok.");
}
});
.container {
display: inline-grid;
grid-template-columns: 1fr 1fr 1fr;
grid-column-gap: 20px;
}
button {
white-space: nowrap;
/* Added for test */
width: 120px;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<button>a normal button</button>
<button>tiny</button>
<button>a rhhh, really wide button</button>
</div>
Я надеюсь, что это помогает!
опять тот же код: p вы хотите обнаружить это при изменении размера?