Если вы хотите справиться с этим только с помощью CSS и сделать его отзывчивым, это , а не возможно способом , который вы хотели бы.
Однако это можно сделать с помощью довольно утомительного JavaScript.
Я предоставляю три варианта.
1. Только CSS, несовершенное решение.
<strong> _-==-_
-@@@@@@@@-
- @ @ -
| @ @ |
- @ @ -
-@@@@@@@@-
-.__.-
</strong>
Что математически, составляет 14,65% радиуса с каждой стороны (что равно ширине или высоте), предполагая идеальный круг.
Не забывайте, что заполнение внутри элемента зависит от ширины его контейнера, поэтому padding: 14.65%
не будет работать , если круг не находится внутри элемента с такой же шириной.
2. JavaScript.
Символы шрифта имеют разные размеры. Для этого вам потребуется:
- моноширинный (или закрытый) шрифт.
- придумать скрипт для расчета ширины на лету.
Сценарий мог бы сделать это, имея элемент inline-block с CSS display: pre;
, чтобы вычислить ширину всех точек останова (т.е. слов). При изменении размера браузера вы будете использовать эти значения ширины, чтобы вычислить, сколько вы можете уместить на каждой строке.
Однако , каждая строка будет иметь различную длину внутри круга , поэтому вам придется работать с высотой строки, высотой круга и количеством строк насколько широкой будет вмещающая линия.
Это не медленный процесс, но сделать это onresize было бы проблематично, поэтому я бы посоветовал использовать фиксированный размер шрифта и размер круга. так что вам не придется переделывать все это.
В качестве альтернативы, другой способ изменить размер круга после того, как он был сгенерирован при загрузке, - это использовать CSS3-преобразование с масштабным коэффициентом.
3. HTML Canvas + JS
Вы могли бы использовать холст вместо этого, согласно решению ниже? Это было бы намного проще. Даже тогда ширина текста вычисляется, но, вероятно, намного быстрее, чем загрузка каждого слова во встроенный блок в DOM.
Обернуть текст в кружок в SVG или Canvas