Неправильная ширина границ в браузере android
В устройствах Android с экранами с высокой плотностью (devicePixelRatio 1.5) границы элементов html имеют неправильную ширину границы.
Здесь два поля: jsbin sample, отображаются на рабочем столе правильно
но на андроиде - как в хроме, так и в браузере стека - они выглядят так:
![enter image description here]()
теперь я понимаю, почему они выглядят так, но я не могу найти какое-либо решение CSS - только js.
решение js должно было бы изменить ширину и высоту элементов как нечетные, а также свойства top/left.
Ответы
Ответ 1
Нет стандартного решения, слишком плохого.
Вы можете сделать следующие трюки, чтобы избежать несогласованного отображения границ с шириной 1px.
- сделать цвет границ немного прозрачным, то есть с альфа = 0,5. Например,
border-color: rgba(169, 0, 52, 0.5)
я тестировал это на браузерах Android 4.4.2 Chrome и Yabrowser. Прекрасно работает!;
-
сделать ширину/высоту граничного элемента нечетным и положение элемента сдвига. Здесь вам нужно поэкспериментировать и использовать JS, например:
$('div.elemWithBadBorders').each(function(){
var $el = $(this);
var width = $el.width();
if(width % 2 == 0){
$el.css('width', (width+1)+'px');
}
});
-
Отключить границы, если они отображаются на дисплеях Retina или других экранах найма. Вы должны использовать медиа-запрос в css следующим образом:
@media (-webkit-min-device-pixel-ratio: 1.5) {
div.elemWithBadBorders {
border: none;
}
}
где 1.5
- плотность пикселей. На дисплеях Retina оно отображается как 2
Ответ 2
Похоже, вы хотите применить медиа-запрос на основе соотношения пикселей. Попробуйте следующее чистое решение для CSS:
@media only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min-device-pixel-ratio: 1.5),
only screen and (min-resolution: 1.5dppx),
only screen and (min-resolution: 240dpi) {
/* High density screen fixes go here */
}
Первая строка не является опечаткой (я знаю, это weird). Как написано, в приведенном выше вопросе также будут применены соответствующие правила для дисплеев Retina с более высокой плотностью, поэтому измените их, если вы хотите что-то более целенаправленное.
Надеюсь, это поможет!
Ответ 3
Ответ находится рядом с строкой width=device-width
. Удалите его, и я думаю, все будет хорошо.
Теоретически:
Например, вы используете Samsung Galaxy S или S2 с разрешением 480 пикселей на 800 пикселей (пиксели css) и devicePixelRatio 1,5. Но ширина устройства составляет 480/1,5 = 320 (высота 800/1,5 = 533).
Итак, тогда вы скажете браузеру Samsung Galaxy S "Нарисуйте мне 1px в строке css пикселей", тогда строка width=device-width
включена - вы говорите ей "Нарисуйте 1px в пикселях устройства". И с width=device-width
строкой пиксель устройства равен 1.5px css пикселей. И тогда вы рисуете 1.5px height (например), браузер использует антиалиасинг для не целочисленных значений, а затем запускается из не целочисленных координат. Это означает, что линия с высотой 1.5px от 1.5px до 3px по вертикали может быть нарисована как высота 2px (или высота 1px)
Ответ 4
Используйте <meta name="viewport" content="initial-scale=1.0,width=device-width">
вместо <meta name="viewport" content="width=device-width">