Кажется, проблема связана с процентными значениями. Вы можете заметить, что набор полей в два раза больше легенды, потому что вы используете 50%
, поэтому набор полей устанавливает свою ширину на основе содержимого легенды, а процентная ширина определяется по этой ширине.
Одна идея исправление заключается в рассмотрении длины вместо процента, а ближайший к проценту - vw
единица
legend {
max-width: 50vw;
}
/* Oversized SPAN content forces the FIELDSET to exceed the 100% width and breaks the layout. */
legend span {
display: inline-block;
width: calc(100% - 100px);
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
<div>
<fieldset>
<legend>Product (<span>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW</span>)</legend>
</fieldset>
</div>
Другой прием состоит в том, чтобы сделать ширину набора полей длиной, чтобы он не учитывал дочерний контент. Для этого мы можем использовать небольшое значение и рассмотреть min-width:100%
, чтобы сохранить поведение блока
fieldset {
display:inline-block;
/* this will do the magic */
width:0;
min-width:100%;
/**/
box-sizing: border-box;
}
legend {
max-width: 50%;
}
/* Oversized SPAN content forces the FIELDSET to exceed the 100% width and breaks the layout. */
legend span {
display: inline-block;
width: calc(100% - 100px);
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
<div>
<fieldset>
<legend>Product (<span>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW</span>)</legend>
</fieldset>
</div>