Подтвердить что ты не робот

Height: auto на SVG не работает

Я пытаюсь использовать лист спрайтов SVG, используя описанный здесь метод "символ".

http://css-tricks.com/svg-sprites-use-better-icon-fonts/

Мой HTML очень прост.

<svg><use xlink:href="/images/iconSprite.svg#camera"/></svg>

И вот пример символа из файла SVG

<symbol viewBox="0 0 24 24" id="clock"><g transform="translate(0 -1028.4)"><path d="M22.085 1035.955a10.997 10.997-23.5 1 1-20.17 8.77 10.997 10.997-23.5 1 1 20.17-8.77z" fill="#1abc9c"/><path d="M21 1040.335a9 9 0 1 1-18 0 9 9 0 1 1 18 0z" fill="#ecf0f1"/><path d="M1.034 1039.8c-.083 1.7.176 3.3.875 4.9 2.42 5.6 8.898 8.2 14.468 5.8 4.29-1.9 6.778-6.2 6.593-10.6-.202 4-2.63 7.8-6.592 9.6-5.57 2.4-12.047-.2-14.47-5.8-.556-1.2-.82-2.6-.874-3.9z" fill="#16a085"/><path d="M20 1040.4c0 .5-.448 1-1 1h-6v-2h6c.552 0 1 .4 1 1z" fill="#3498db"/><path d="M12 1033.4c-.552 0-1 .448-1 1v5h2v-5c0-.552-.448-1-1-1z" fill="#2c3e50"/><path fill="#c0392b" d="M6.017 1045.705l4.95-4.95.707.707-4.95 4.95z"/><path d="M12 1038.4c-1.105 0-2 .9-2 2s.895 2 2 2 2-.9 2-2-.895-2-2-2zm0 1c.552 0 1 .4 1 1 0 .5-.448 1-1 1s-1-.5-1-1c0-.6.448-1 1-1z" fill="#34495e"/></g></symbol>

Проблема, с которой я столкнулась, заключается в том, что когда я использую CSS для установки ширины элемента SVG на 64 пикселей, высота SVG автоматически устанавливается на 150 пикселей. Я попытался установить высоту: auto; и высота: 100%; на элементе SVG, но это не имеет значения. Единственный способ заставить его работать - установить высоту: 64px; который я не хочу делать, потому что соотношение сторон моих значков не всегда может быть квадратным. Я хочу, чтобы это автоматически масштабировало SVG в исходном соотношении сторон, поэтому значок 4: 3 (как определено в окне просмотра) автоматически получит высоту 300 пикселей, если я установил ширину 400 пикселей.

Я прочитал несколько руководств по масштабированию SVG и сохранению соотношения сторон, а некоторые из них имеют решения при использовании элемента IMG, но я не могу найти его для встроенного SVGS или использования внешнего SVG с USE.

Кто-нибудь знает решение, которое работает во всех браузерах, включая IE9 + и Android 4.0 +?

4b9b3361

Ответ 1

DEMO

Вам необходимо определить viewBox для каждого элемента, на который вы ссылаетесь. потому что в одном документе SVG могут быть разные элементы.

Поэтому удалите viewBox из элемента, к которому вы ссылаетесь. Добавьте viewBox в место, из которого вы ссылаетесь.

Я предлагаю вам добавить viewBox в элемент svg:

<svg class="test" viewBox="0 0 25 25">
    <use xlink:href="/images/iconSprite.svg#clock"/>
</svg>

Теперь вы можете масштабировать его:

Если вы определяете ширину css:

.test {
    width: 50px;
}

Он будет отображаться до тех пор, пока он будет соответствовать высоте или ширине.

Итак, если вам нужен отзывчивый дизайн, вы можете просто масштабировать его с помощью % длины
.test { width:30%; }

SCALE SVG Хорошая статья о масштабировании svg из CSS-трюков:)

Ответ 2

В более старых версиях Safari, а также в нескольких старых браузерах Android установка окна просмотра и ширины была недостаточной.

В моем случае мне нужно применить высоту: 100%; а также ширину.