Веб-страница, над которой я работаю, использует некоторые модные шевроны для пулевых точек в списке. Я хотел бы определить стиль списка, который масштабируется с размером шрифта самих элементов списка: это конечная цель моей проблемы здесь.
В настоящее время мы сохраняем эти шевроны в файлах SVG (один из которых предлагается ниже), поэтому они могут быть увеличены, не выглядя ужасно. Они ссылаются следующим образом:
ul.foo {
list-style-image: url("../images/chevron.svg");
}
Мы используем эти списки chevron несколько раз по всему сайту. Иногда они имеют большой текст, иногда с меньшим или нормальным размером текста. Мы вынуждены создавать новое изображение шеврона для каждого размера шрифта (например, chevron-small.svg
, chevron-medium.svg
, chevron-large.svg
и т.д.), Но, безусловно, есть лучший способ, который позволяет нам использовать только одно изображение и масштабировать его и вниз самостоятельно, основываясь на размере шрифта!
Однако я еще не понял, как сделать масштаб изображения с размером шрифта.
Вики W3 для стиля в стиле списка позволяют предположить, что "если внутренняя ширина или высота изображения заданы в процентах, то это процент разрешен против 1em", что звучит так, как мы хотим. Я не разработал, как это сделать. Брайан Кэмпбелл ответ на Как я могу сделать масштаб svg с его родительским контейнером?, кажется, предлагает способ сделайте это процентное событие, но когда я устанавливаю ширину или высоту 100%, точки маркера шеврона проявляются крайне крошечными или вообще не имеют значения даже при большом размере шрифта.
Как я могу полностью масштабировать этот стиль в стиле списка с размером текста, так что, когда размер текста в UL увеличивается, изображение пули тоже?
( Шрифты Glyph: Мы не можем их использовать. Они будут выполнять работу визуально, но они плохо влияют на доступность, потому что читатели экрана не будут считывать пули в виде пуль но как некоторый другой странный характер. Мы могли бы определить собственный шрифт глифа, возможно, и заменить символы пули в нем нашими, но накладные расходы на размер файла при этом будут чрезмерными. Насколько я могу судить, нам нужно использовать изображение.)
Мой SVG-код
SVG поставляется из Illustrator и имеет этот код:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="8px" height="14px" viewBox="0 0 8 14" enable-background="new 0 0 8 14" xml:space="preserve">
<path fill="#666666" d="M0.37,12.638l5.726-5.565L0.531,1.347C0.252,1.059,0.261,0.601,0.547,0.321
c0.289-0.279,0.746-0.272,1.026,0.016l6.062,6.24c0,0.002,0.006,0.004,0.008,0.006c0.068,0.07,0.119,0.156,0.156,0.244
C7.902,7.088,7.846,7.399,7.631,7.61c-0.002,0.004-0.006,0.004-0.01,0.006l-6.238,6.063c-0.143,0.141-0.331,0.209-0.514,0.205
c-0.187-0.006-0.372-0.078-0.511-0.221C0.076,13.376,0.083,12.919,0.37,12.638"/>
</svg>
Как показано ниже, где текст равен 16px, а шеврон не масштабируется до размера шрифта, но довольно приличный и видимый (в этом случае немного больше, чем хотелось бы, но пусть игнорирует это, поскольку само изображение можно редактировать):
Как я уже говорил, я попытался выполнить ответ Брайана Кэмпбелла и установить для свойства width или height значение 100%:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100%" viewBox="0 0 8 14" enable-background="new 0 0 8 14" xml:space="preserve">
Однако, если ширина или высота, определенные как 100%, кажется, делают шевроны крошечными и намного меньше 1em, как указано:
(Снимок экрана из Firefox. В Chrome они немного больше, все еще намного меньше 16 пикселей).
Фрагмент кода
/*
The image referenced here is the SVG provided above, with base 64 encoding. It is the
freshly exported version that still has a defined width and height of 8px and 14px.
You may wish to just save the SVG above locally.
*/
ul {
list-style-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI4cHgiIGhlaWdodD0iMTRweCIgdmlld0JveD0iMCAwIDggMTQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDggMTQiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiM2NjY2NjYiIGQ9Ik0wLjM3LDEyLjYzOGw1LjcyNi01LjU2NUwwLjUzMSwxLjM0N0MwLjI1MiwxLjA1OSwwLjI2MSwwLjYwMSwwLjU0NywwLjMyMWMwLjI4OS0wLjI3OSwwLjc0Ni0wLjI3MiwxLjAyNiwwLjAxNmw2LjA2Miw2LjI0YzAsMC4wMDIsMC4wMDYsMC4wMDQsMC4wMDgsMC4wMDZjMC4wNjgsMC4wNywwLjExOSwwLjE1NiwwLjE1NiwwLjI0NEM3LjkwMiw3LjA4OCw3Ljg0Niw3LjM5OSw3LjYzMSw3LjYxYy0wLjAwMiwwLjAwNC0wLjAwNiwwLjAwNC0wLjAxLDAuMDA2bC02LjIzOCw2LjA2M2MtMC4xNDMsMC4xNDEtMC4zMzEsMC4yMDktMC41MTQsMC4yMDVjLTAuMTg3LTAuMDA2LTAuMzcyLTAuMDc4LTAuNTExLTAuMjIxQzAuMDc2LDEzLjM3NiwwLjA4MywxMi45MTksMC4zNywxMi42MzgiLz48L3N2Zz4=');
/* Or if you wish to save the SVG locally:
list-style-image: url('chevron.svg');
*/
}
.small-list {
font-size: 85%;
}
.large-list {
font-size: 150%;
}
<ul class="small-list">
<li>The goal is to make the chevron smaller for this list</li>
<li>Specifically, just slightly smaller than capital letters, as stated.</li>
<li>Nomas matas</li>
<li>Roris dedit</li>
</ul>
<ul class="large-list">
<li>And larger for this list</li>
<li>Nomas matas</li>
<li>Roris dedit</li>
</ul>