Адаптируемых блоков не работает на кнопки или элементы полей
Я пытаюсь центрировать внутренние элементы 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
элементы могут быть гибкими предметы.ссылки: