У меня есть следующая часть. Я уже пробовал это делать, но пока безуспешно.
.container {
width: 600px;
}
.row {
margin-bottom: 10px;
}
.item {
width: 100%;
border: 1px solid silver;
margin-bottom: 0;
display: flex;
justify-content: space-between;
min-height: 60px;
flex: 1 1 0;
}
.item > .selector {
display: flex;
align-items: center;
padding-left: 20px;
}
.item > .label-text {
background-color: silver;
color: white;
padding: 0 10px;
display: flex;
align-items: center;
}<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel = "stylesheet"/>
<div class = "container">
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 1</span>
</div>
<span class = "label-text">Small Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 2</span>
</div>
<span class = "label-text">longer Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 3</span>
</div>
<span class = "label-text">Soo long Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 4</span>
</div>
<span class = "label-text">Text</span>
</label>
</div>
</div>
</div>К сожалению, я не могу изменить структуру. JS, использующих эту структуру, ооочень много. Но я могу редактировать CSS. Я абсолютно не разбираюсь в гибкой коробке.
Текст в элементах span.label-text может быть любым, но не может быть длиннее половины его родительской ширины.
Это плагин, который используется во многих частях. Я не могу просто определить фиксированную ширину.
Можно ли сделать все элементы span.label-text такими же широкими, как тот, у которого самый длинный текст, без изменения html или использования для него JS?






Вы можете определить ширину этого текста надписи.
.container {
width: 600px;
}
.label-text {
width: 150px;
}
.row {
margin-bottom: 10px;
}
.item {
width: 100%;
border: 1px solid silver;
margin-bottom: 0;
display: flex;
justify-content: space-between;
min-height: 60px;
flex: 1 1 0;
}
.item > .selector {
display: flex;
align-items: center;
padding-left: 20px;
}
.item > .label-text {
background-color: silver;
color: white;
padding: 0 10px;
display: flex;
align-items: center;
}<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel = "stylesheet"/>
<div class = "container">
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 1</span>
</div>
<span class = "label-text">Small Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 2</span>
</div>
<span class = "label-text">longer Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 3</span>
</div>
<span class = "label-text">Soo long Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 4</span>
</div>
<span class = "label-text">Text</span>
</label>
</div>
</div>
</div>Поскольку вы используете Flexbox, вы можете поэкспериментировать с flexзначения обоих гибкие элементы элемента .item, например:
.container {
width: 600px;
}
.row {
margin-bottom: 10px;
}
.item {
width: 100%;
border: 1px solid silver;
margin-bottom: 0;
display: flex;
justify-content: space-between;
min-height: 60px;
flex: 1 1 0;
}
.item > .selector {
display: flex;
flex: 2; /* added; makes it twice as wide as the .label-text */
align-items: center;
padding-left: 20px;
}
.item > .label-text {
background-color: silver;
color: white;
padding: 0 10px;
display: flex;
flex: 1; /* added */
align-items: center;
justify-content: center; /* added */
}<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel = "stylesheet"/>
<div class = "container">
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 1</span>
</div>
<span class = "label-text">Small Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 2</span>
</div>
<span class = "label-text">longer Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 3</span>
</div>
<span class = "label-text">Soo long Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 4</span>
</div>
<span class = "label-text">Text</span>
</label>
</div>
</div>
</div>Извините, похоже, я забыл об этом из описания. Я не могу просто добавить фиксированную ширину, потому что это плагин в более крупной системе. И текст может быть любым. Заказчик хочет, чтобы все этикетки были такой же ширины, как и этикетка с более длинным текстом.
Невозможно использовать чистый CSS, потому что не все элементы связаны между собой, для этого потребуется JS / jQuery.
Вот пример jQuery с проверкой максимальной ширины текст надписи во всех элементах и применением ширины ко всем текст надписи.
var width =0
jQuery('.item').each(function() {
if (width <= jQuery(this).children(".label-text").outerWidth())
{
width = jQuery(this).children(".label-text").outerWidth();
}
});
jQuery(".label-text").css('width',Math.ceil(width));body { margin:0; padding:0;}
.container {
width: 600px;
}
.row {
margin-bottom: 10px;
}
.item {
width: 100%;
border: 1px solid silver;
margin-bottom: 0;
display: flex;
justify-content: space-between;
min-height: 60px;
flex: 1 1 0;
}
.item > .selector {
display: flex;
align-items: center;
padding-left: 20px;
}
.item > .label-text {
background-color: silver;
color: white;
padding: 0 10px;
display: flex;
align-items: center;
}<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel = "stylesheet"/>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 1</span>
</div>
<span class = "label-text">Small Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 2</span>
</div>
<span class = "label-text">longer Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 3</span>
</div>
<span class = "label-text">Soo long Text</span>
</label>
</div>
</div>
<div class = "row">
<div class = "col-sm-7 col-xs-12">
<label class = "item">
<div class = "selector">
<input type = "radio" />
<span>Option 4</span>
</div>
<span class = "label-text">Text</span>
</label>
</div>
</div>
</div>
Вам нужно применить ширину в классе ".item> .label-text".