#html #css #border #transform
#HTML #css #граница #преобразовать
Вопрос:
Я столкнулся с этой ошибкой (см. Ошибка / Ожидаемое изображение) при попытке использовать преобразование css с аргументами с плавающей запятой для элемента div с границей. Это выглядит как «граница вокруг границы», эта дополнительная граница имеет тот же цвет, что и фон элемента. Ошибка, очевидно, связана с тем, как браузеры работают со значениями с плавающей запятой, потому что, когда я использую just transform: translate(10px, 10px)
, все в порядке. Одна интересная вещь, некоторые аргументы с плавающей запятой работают нормально, а другие — нет.
Я пробовал разные советы из разных ресурсов, связанные, например, с размытой границей или ошибками с плавающими значениями, но, к сожалению, ничего не работает. Вот список вещей, которые я пробовал:
- добавить
will-change: transform
в элемент backface-visibility: hidden
-webkit-filter: blur(0px)
-webkit-font-smoothing: antialised
- для перевода используйте только четные / нечетные числа
Возможные обходные пути:
- Добавить
border-radius: 1px
(это было неожиданно) - Удалить границу перенести в другой больший div центрировать его
Код для воспроизведения (попробуйте разные аргументы с плавающей запятой в transform):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<style>
.item {
transform: scale(1.07);
background-color: red;
border: 10px solid white;
width: 50px;
height: 50px;
}
</style>
<body>
<div class="container">
<div class="item"></div>
</div>
</body>
</html>
Ответ №1:
Похоже, это ошибка рендеринга в браузере. Лучшим решением (при условии, что для этой проблемы нет других ограничений) было бы добавить background-clip: content-box;
блок .item
CSS.
Это обрезает фон элемента в поле содержимого элемента, а не в поле его границы, что на практике означает, что фон не отображается под границей элемента, поэтому, скорее всего, он не будет перетекать через границу при субпиксельном рендеринге.