Адаптируемых блоков не работает на кнопки или элементы полей
Я пытаюсь центрировать внутренние элементы a <button> - тег с flexbox в justify-content: center. Но Safari не центрирует их. Я могу применить тот же стиль к любым другим тегам, и он работает по назначению (см. <p> - tag). Только кнопка выровнена по левому краю.
попробуйте Firefox или Chrome, и вы можете увидеть разницу.
есть ли стиль агента пользователя, который я должен перезаписать? Или любое другое решение этой проблемы?
div {
  display: flex;
  flex-direction: column;
  width: 100%;
}
button, p {
  display: flex;
  flex-direction: row;
  justify-content: center;
}<div>
  <button>
    <span>Test</span>
    <span>Test</span>
  </button>
  <p>
    <span>Test</span>
    <span>Test</span>
  </p>
</div>и a jsfiddle: http://jsfiddle.net/z3sfwtn2/2/
2 ответа:
проблема в том, что
<button>элемент не предназначен для гибкого (или сеточного) контейнера.на момент написания этой статьи браузеры на основе Webkit (Chrome и Safari) придерживались этого принципа проектирования. Firefox и Edge - нет. Я не тестировал другие браузеры.
поэтому у вас не должно быть проблем с созданием
<button>элемент flex (или grid) контейнер в Firefox и Edge. Но не ожидайте, что он будет работать в Chrome или Safari.такое поведение в настоящее время применяется, по крайней мере, три элемента:
<button>
<fieldset>
<legend>я теоретизирую, но я считаю, что идея заключается в поддержании уровня здравого смысла при стилизации HTML-элементов. Например, боги HTML хотели помешать авторам превратить кнопку в таблицу.
однако, по крайней мере, в этом случае, есть простой и легкий обходной путь:
оберните содержимое
buttonнаspanи выберитеspanгибкий контейнер.скорректированный HTML (завернутый
buttonконтентspan)<div> <button> <span><!-- using a div also works but is not valid HTML --> <span>Test</span> <span>Test</span> </span> </button> <p> <span>Test</span> <span>Test</span> </p> </div>скорректированный CSS (targeted
span)button > span, p { display: flex; flex-direction: row; justify-content: center; }Примечание: хотя они не могут быть гибкими контейнерами,
buttonэлементы могут быть гибкими предметы.ссылки: