CSS элементы сетки не заполняют ширину в MacOS Safari, когда выравнивание установлено на базовую линию - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема с сеткой CSS, которая возникает только в MacOS Safari (тестирование на v13.1). Следующий фрагмент должен привести к label и textfield - при этом последний распространяется на всю ширину контейнера div. Это работает в Chrome и Firefox, но Safari просто не сделает этого. Интересно, что макет защелкивается на месте при изменении размера окна, но снова ломается при фокусировке текстового поля.

<html>
<head>
    <title>Test</title>
    <style type="text/css">
        body {
            display: flex;
            flex-direction: column;
            overflow: hidden;
        }

        div {
            background-color: lightcoral;
            display: grid;
            grid-template-columns: auto 1fr;
            align-items: baseline;
        }
    </style>
</head>
<body>

<div>
    <label>Label</label>
    <input type="text" placeholder=" ">
</div>

</body>
</html>

CodePen

При удалении display или overflow свойство из тега body макет сетки работает как положено. Но оба свойства требуются в среде, где возникает эта проблема. Следовательно, проблема не может быть решена путем удаления этих свойств. Проблема также исчезает при изменении align-items на что угодно, кроме baseline. К сожалению, выравнивание baseline также является ключом для желаемого макета.

Такое поведение мне кажется ошибкой в ​​Safari, но я, хотя и хотел бы спросить второе мнение. Если есть решение, я был бы рад, если бы вы могли поделиться им.

Кстати: пустой placeholder с одним пробелом уже является исправлением для выравнивания baseline в Safari. Без этого пустые текстовые поля будут выровнены внизу, а не их baseline.

1 Ответ

0 голосов
/ 17 апреля 2020

Вам не нужно align-items: baseline для выравнивания метки и ввода. Просто сбросьте стиль ввода будет хорошо.

body {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.group {
  background-color: lightcoral;
  padding: 1rem;
  display: grid;
  grid-template-columns: auto 1fr;
}

input {
  padding: 0;
  outline: 0;
  -webkit-appearance: none;
  border: 0;
}
<html>
<head>
  <title>Test</title>
</head>
<body>
<div class="group">
  <label>Label</label>
  <input type="text">
</div>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...