Вы можете сделать это по-другому, и вам не нужно думать о text-align
, но о ширине элемента, так как это всего одна строка.По сути, ваш текст всегда будет по центру, но ширина будет либо соответствовать содержимому, либо будет иметь полную ширину:
header {
display: flex;
flex-wrap: wrap;
}
header div:first-child {
text-align:center; /*center by default*/
flex-grow:1; /*will be full width after the wrap*/
}
header div:last-child {
flex-grow:100; /*make it consume more space to have a left alignment before wrap*/
}
ul {
margin: 0;
padding: 0;
display: flex;
justify-content:center;
}
li {
margin: 0 1em;
}
<header>
<div class="align-center">
<a href="">Have to be align</a>
</div>
<div>
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</div>
</header>
Обновление
Для управления полем вы можете рассмотреть псевдоэлемент внутри второго контейнера:
header {
display: flex;
flex-wrap: wrap;
}
header div:first-child {
text-align:center; /*center by default*/
flex-grow:1; /*will be full width after the wrap*/
}
header div:last-child {
flex-grow:100; /*make it consume more space to have a left alignment before wrap*/
display: flex;
flex-wrap:wrap;
}
ul {
margin: 0;
padding: 0;
display: flex;
flex-grow:1;
}
li {
margin: 0 1em;
}
header div:last-child::before {
content:"";
width:6em; /*your margin*/
}
<header>
<div class="align-center">
<a href="">Have to be align</a>
</div>
<div>
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</div>
</header>