После исчерпывающего перебора всех перестановок, которые я мог придумать, у меня действительно есть своего рода решение. Для этого требуются две вещи, которых я пытался избежать (контейнер и встроенные стили), но он работает как часть системы. Некоторая дополнительная информация: я работаю над веб-приложением, которое позволяет пользователям устанавливать базовый размер шрифта (например, 12, 14, 16 или 18 pt), а затем также обрабатывает масштабирование в диапазоне от 10% до 300% для пользователи со слабым зрением. У нас есть некоторые изображения (в основном математические выражения), которые встроены в окружающий контент страницы в виде SVG. На уровнях печати и масштабирования по умолчанию SVG с номером «3» имеет тот же размер, что и обычный текст с номером 3 рядом с ним. Но вещи становятся несоответствующими, поскольку другие переменные начинают меняться. Метод, описанный ниже, когда он будет применен, позволит нам точно контролировать, как эти изображения совпадают с окружающим текстом, независимо от размера шрифта или уровня масштабирования.
Вот ссылка на решение в codepen https://codepen.io/spicedham/pen/pxzYYe и вариант с использованием... переменных https://codepen.io/spicedham/pen/MPgxxo.
Вот CSS:
.container {
display: inline-flex;
vertical-align: middle;
border-left: solid .05em transparent;
border-right: solid .05em transparent;
}
.scaleMe {
transform: scale(1.1);
margin: .05em 0;
}
А вот как выглядят образы и контейнеры:
<span class="container" style="font-size: 300px;"><img class="scaleMe" src="svg.svg" width="300" height="100" alt="" style="font-size: 100px"/></span>
<span class="container" style="font-size: 100px"><img class="scaleMe" src="svg.svg" width="100" height="200" alt="" style="font-size: 200px"/></span>
Проблема, с которой я столкнулся, независимо от того, использовал ли я calc() или transform:scale(), заключалась в том, что я не мог заставить контент последовательно перекомпоновываться вокруг изображения с измененным размером - увеличенное изображение перекрывало смежный контент. Это было бы возможно, если бы все изображения были одинакового размера или все они имели бы одинаковые пропорции, но я не могу на это рассчитывать в нашей системе.
Другая проблема заключалась в том, что использование процентов в качестве единиц измерения, хотя и является логическим выбором, не работает так, как вы ожидаете.
Таким образом, решение состояло в том, чтобы создать запасную относительную единицу em. Я взял ширину изображения (скажем, 300 пикселей) и установил ее в качестве размера шрифта для контейнера. Затем я взял высоту изображения (скажем, 100 пикселей) и установил ее в качестве размера шрифта изображения. Это позволяет мне открыть контейнер, чтобы он занимал то же место, что и масштабированное изображение. Обходит ограничение невозможности использовать проценты для ширины границ и точно устанавливает эквивалент процентов для верхнего и нижнего полей изображения.
person
spicedham
schedule
27.09.2018
100px
на100px
, преобразованное с помощьюtransform: scale(1.05)
, по умолчанию будет занимать105px
на105px
в потоке страниц. Если ваше изображение этого не делает, у вас есть дополнительные ограничения, такие какmax-width: 100%
. Убедитесь, что вы предоставили минимальный, полный и поддающийся проверке пример проблемы. - person Obsidian Age   schedule 14.09.2018