JSFiddle - React, Tailwind, and code Playground
HTML
<div class="container">
<div class="fieldLabel" id="fieldLabel">
<span class="fieldText" id="fieldText">my text</span>
</div>
</div>
<br>
<p style="color: #444">Smoothly resize the window, narrowing it.<br>
In browsers: Opera, Chrome, Safari, IE7, FF<br> field "text" will be cut immediately,<br> and only then will turn red.<br>Browsers: IE8, IE9 <br>the "text" will turn red<br>as soon as will be cut.</p>
<br>
<br>
<div id="label_1"></div>
<div id="label_2"></div>
<div id="label_3"></div>
<div id="label_4"></div>
<div id="label_5"></div>
CSS
.container{
width:12%;
height:20px;
position:relative;
}
.fieldLabel{
border: solid 1px pink;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.fieldText{
white-space: nowrap;
border: 0;
padding: 0;
margin: 0;
}
JavaScript
$(window).resize(function() {
var fieldLabel = document.getElementById("fieldLabel");
var fieldText = document.getElementById("fieldText");
var currentWidth = fieldText.offsetWidth;
fieldLabel.style.textOverflow = "clip";
var realWidth = fieldText.offsetWidth;
fieldLabel.style.textOverflow = "ellipsis";
if(fieldText.offsetWidth > fieldLabel.offsetWidth
|| realWidth > currentWidth
|| fieldLabel.scrollWidth > fieldLabel.offsetWidth){
fieldText.style.color = "red";
} else {
fieldText.style.color = "black";
}
document.getElementById("label_1").innerHTML = "currentWidth = " + currentWidth;
document.getElementById("label_2").innerHTML = "realWidth = " + realWidth;
document.getElementById("label_3").innerHTML = "fieldLabel.offsetWidth = " + fieldLabel.offsetWidth;
document.getElementById("label_4").innerHTML = "fieldText.offsetWidth = " + fieldText.offsetWidth;
document.getElementById("label_5").innerHTML = "fieldLabel.scrollWidth = " + fieldLabel.scrollWidth;
});