Появляется все больше и больше мобильных веб-проектов, а дизайнеры предъявляют все более высокие требования к пользовательскому интерфейсу, например, граница в 1 пиксель. существует高清屏Ниже 1px на мобильной стороне будет очень толстым. Например, это фейк 1 пиксель
Это действительно 1 пиксель
1. Причины
Так почему возникает эта проблема? В основном это связано с одной вещью, соотношением пикселей устройства DPR (devicePixelRatio), которое представляет собой отношение пикселей устройства к пикселям CSS, когда масштаб по умолчанию равен 100%.
window.devicePixelRatio=物理像素 /CSS像素
Текущий основной экран DPR=2 (iPhone 8) или 3 (iPhone 8 Plus). Возьмем в качестве примера экран 2x, физический пиксель устройства должен достигать 1 пикселя, а DPR=2, поэтому пиксель CSS может быть только 0,5. Общий эскиз разработан по 750, 1px над ним основан на 750, и мы пишем стиль CSS на основе устройства 375, поэтому мы должны написать 0,5px! После того, как вы попробуете это, вы узнаете, что система iOS 8+ поддерживает его, а система Android — нет.
2. Решения
1. Схема предоставлена WWDC для системы iOS
推荐指数:**
На конференции WWDC была дана схема 1px, при написании 0.5px будет отображаться бордюр с шириной физического пикселя вместо css пиксельного бордюра. Итак, под iOS вы можете писать так.
border:0.5px solid #E5E5E5
Может вы спросите, почему не 0.3333px под 3х экраном? После моего теста я смоделировал iPhone 8Plus в Chrome и обнаружил, что он не отображается, когда его размер меньше 0,46 пикселя.
Суммировать:
Достоинства: Простой, без побочных эффектов.
Минусы: Поддерживает iOS 8+, а не Android. Более поздняя версия Android будет в порядке.
Первые два значения x, y в основном управляют тем, какое ребро отображается, а последние два значения управляют радиусом тени и радиусом расширения. На самом деле метод может перейти на эту адресную строкупопытайся.
Суммировать
Преимущества: простота в использовании, также можно получить закругленные углы
Недостатки: Метод реализации имитации, кто не увидит, что это тень, а не граница, если внимательно посмотреть.
4. Используйте псевдоэлементы
推荐指数:****
Этот метод я использую чаще всего, и эффект также очень хороший, просто перейдите непосредственно к коду.
Как видите, установите для псевдоэлемента абсолютное позиционирование и выровняйте его по верхнему левому углу родительского элемента, установите ширину на 100%, высоту на 1 пиксель, а затем уменьшите ее в направлении Y.0.5倍.
Также установите абсолютное позиционирование для псевдоэлемента и выровняйте его по левому верхнему углу родительского элемента. Сначала увеличьте длину и ширину псевдоэлемента в 2 раза, а затем установите рамку по центру левого верхнего угла и масштабируйте его до исходного0.5倍Суммировать:
Преимущества: совместим со всеми моделями, достигает истинного 1px и может скруглять углы.
Недостатки: временно используется псевдоэлемент after, что может повлиять на очистку поплавков.
Однако стиль, показанный в приведенном выше коде, выглядит следующим образом.
Почему нет вертикальной линии посередине? ! Сначала я думал, что под псевдоклассом, если я напишу псевдоэлемент после, то может и не получиться.Увидев это, я обнаружил, что есть псевдоэлемент after, но он, похоже, находится не в том месте, поэтому я побежал к нему. Я хочу вертикальные линии, в чем причина? Наконец, я нашел способ решить эту проблему под руководством Анжи, и тогда я понял правду.
Оказывается проблема с моими настройками ширины и высоты.Для вертикальных линий это должно быть ширина = 1px, высота = 100%, а затем масштабировать по оси X0.5倍, чтобы вышла вертикальная линия; аналогично устанавливаем горизонтальную линию, она должна быть width=100%, height=1px, а затем масштабируем по оси Y0.5倍.
Теперь, когда вы знаете причину, вам больше не нужно беспокоиться об ошибке.
Я думал, что смогу написать рамку в 1 пиксель, зная описанный выше метод, но сразу же засомневался в себе.
1 пиксель приведенного выше поля ввода, все необходимые границы - 1 пиксель, я использовал ширину и высоту, чтобы увеличить на 200%, а затем уменьшить0.5倍Методы.Это странно, этот же метод работает и в других местах, почему бы не показать его здесь. После долгих поисков я наконец нашел эту статьюПримечания по использованию псевдоэлементов CSS, и нашел:Итак, причина не отображения найдена.==Поле ввода Textarea не поддерживает псевдоэлементы==, нет возможности, метод псевдоэлемента использовать нельзя, можно только использовать другие методы.
4. Резюме
Подводя итог, новые проекты лучше всего использовать设置viewport的scale值, этот метод имеет хорошую совместимость и его удобно написать позже. Для старых проектов может быть больше изменений, и чаще всего используются следующие методы:伪元素+transformМетоды. Другие фоновые изображения, теневые методы все еще не очень гибкие, и совместимость не очень хорошая.