Слово «Город» нарушает мой макет только в Safari

#html #css #bootstrap-4 #web-frontend

#HTML #css #bootstrap-4 #веб-интерфейс

Вопрос:

Я обнаружил то, что кажется очень странным поведением в Safari, и я не могу понять, что происходит.

Мой макет, просмотренный в Chrome:

Скриншот части моей HTML-формы, просматриваемой в Chrome

Но при просмотре в Safari я получаю следующее:

Скриншот части моей HTML-формы, просматриваемой в Chrome

По какой-то странной причине <small class="text-muted">(required)</small> часть моего HTML была перенесена на новую строку.

Что еще более странно, если я просто изменю одну букву в слове «Город», макет станет правильным.

Та же часть моей формы, но я буквально изменил одну вещь, а именно, я изменил слово ‘City’, чтобы вместо него было написано ‘Sity’:

Та же часть моей формы, но я изменил слово 'City', чтобы вместо него было написано 'Sity'

На самом деле, кажется, я могу использовать любое слово вместо ‘City’, но когда я использую слово ‘City’, метка внезапно занимает 2 строки. Итак, в свете этого есть простое исправление, которое заключается в том, чтобы просто использовать слово ‘Town’ вместо слова ‘City’, но я все равно хотел бы знать, действительно ли это странная ошибка или я что-то упускаю.

Что, черт возьми, здесь происходит?

Мне не удалось воссоздать эту проблему в инструменте stack overflow для обработки фрагментов кода.

Я использую Bootstrap 4, и часть HTML, на которую я смотрю, выглядит следующим образом:

 <div class="form-row">
  <div class="form-group needs-validation col-sm-6 col-md-6">
    <label for="inputCity">City <small class="text-muted">(required)</small></label>
    <input type="text" class="form-control" id="inputCity" name="city" required>
    <div class="invalid-feedback">
      Please provide your city.
    </div>
  </div>
  <div class="form-group needs-validation col-sm-6 col-md-4">
    <label for="inputState">State <small class="text-muted">(required)</small></label>
    <input type="text" class="form-control" id="inputState" name="state" required
              autocomplete="address-level1">
    <div class="invalid-feedback">
      Please provide your state.
    </div>
  </div>
  <div class="form-group needs-validation col-5 col-sm-4 col-md-2">
    <label for="inputZip">Zip <small class="text-muted">(required)</small></label>
    <input type="text" class="form-control" id="inputZip" name="zip" required>
    <div class="invalid-feedback">
      Please provide your zip code.
    </div>
  </div>
</div>
  

РЕДАКТИРОВАТЬ ответы на комментарии

@Rdg Замена пробела на amp;nbsp; действительно исправляет макет. Но почему это происходит только тогда, когда за ним следует слово ‘City’ и ничего больше (конечно, я не тестировал каждое слово в английском языке, так что, может быть, это как-то связано с точной шириной слова ‘City’?)

@Geuis Да, мне наконец удалось воссоздать это в codepen, похоже, проблема в используемом мной шрифте («Raleway») и точной ширине слова «Город». https://codepen.io/Redtama/pen/RdRpqX

@Richard Uie Я не уверен, что вы имеете в виду под substitute the HTML entity for uppercase "c," i.e., amp;amp;#67; , но что касается переноса, вызванного шириной, я могу заменить слово «Город» чем-то гораздо более длинным, и перенос не произойдет.

Пример с более длинным текстом метки
Та же часть формы, но с более длинной меткой

Комментарии:

1. Действительно странно. Вы пробовали добавлять amp;nbsp рядом с городом. Черный пробел html? Возможно, это решает проблему.

2. Не могли бы вы создать для этого codepen, который демонстрирует проблему в реальном времени?

3. Кажется очевидным, что ширина контекста, в котором находится ваше «C», вызывает перенос. Чем обусловлено такое поведение, НЕ очевидно. Сталкиваетесь ли вы со странным результатом, если заменяете HTML-объект заглавной буквой «c», то есть amp;amp;#67;?

4. @RichardUie Проверьте мою правку 🙂 Также вот codepen, где мне удалось воссоздать проблему. codepen.io/Redtama/pen/RdRpqX

5. @Geius Да! codepen.io/Redtama/pen/RdRpqX

Ответ №1:

Я бы рекомендовал добавить в ваш css следующее, чтобы текст стал встроенным элементом:

 .text-muted {
  display: inline-block;
}