Подогнать ширину под размер текста
Использую --width: 140px;
фиксированную ширину. Подогнала под большой текст, но если текст маленький, смотрится не очень
Как можно задать ширину в зависимости от длины текста
? Возможно ли расчитать длину текста ?
.toggle {
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
--width: 140px;
--height: calc(var(--width) / 4);
position: relative;
display: inline-block;
width: var(--width);
height: var(--height);
border-radius: var(--height);
cursor: pointer;
}
.toggle input {
display: none;
}
.toggle .slider {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: var(--height);
background-color: #dee0e3;
transition: all 0.4s ease-in-out;
}
.toggle .slider::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: calc(var(--height));
height: calc(var(--height));
border-radius: calc(var(--height) / 2);
background-color: green;
transition: all 0.4s ease-in-out;
}
#btn1 input:checked+.slider {
background-color: lightblue;
}
#btn2 input:checked+.slider {
background-color: pink;
}
.toggle input:checked+.slider::before {
transform: translateX(calc(var(--width) - var(--height)));
}
.toggle .labels {
position: absolute;
top: 8px;
left: 0;
width: 100%;
height: 100%;
font-size: 12px;
font-family: sans-serif;
transition: all 0.4s ease-in-out;
}
.toggle .labels::after {
content: attr(data-off);
position: absolute;
right: 5px;
color: black;
opacity: 1;
transition: all 0.4s ease-in-out;
}
.toggle .labels::before {
content: attr(data-on);
position: absolute;
left: 5px;
color: black;
opacity: 0;
transition: all 0.4s ease-in-out;
}
.toggle input:checked~.labels::after {
opacity: 0;
}
.toggle input:checked~.labels::before {
opacity: 1;
}
<label class="toggle" id="btn1">
<input type="checkbox" @oninput="orderBy1Async" checked="@isChecked1">
<span class="slider"></span>
<span class="labels"
data-on="длинный текст..." data-off="длинный текст...">
</span>
</label>
<label class="toggle" id="btn2">
<input type="checkbox" @oninput="orderBy2Async" checked="@isChecked2">
<span class="slider"></span>
<span class="labels"
data-on=":-)" data-off=":-)">
</span>
</label>
если невозомжно расчитать размер текста, то как бы вы поступили, чтоб уменьшить размер фиксированно, для второй кнопки ?
Источник: Stack Overflow на русском