#html #css #internet-explorer-7 #internet-explorer-6
#HTML #css #internet-explorer-7 #internet-explorer-6
Вопрос:
Я пытаюсь добиться вертикального центрирования блока в IE7 (IE6, если это возможно), позвольте мне прояснить одну вещь — я центрирую не сам элемент по вертикали, а текст внутри элемента. Это мой CSS и HTML, который работает на IE8 и выше, но не ниже.
a {
display: table-cell;
width: 100px;
height: 54px;
background: black;
color: white;
text-align: center;
text-decoration: none;
vertical-align: middle;
}
<a href="#">Hello superlongword</a>
Теперь я знаю, что IE6 практически мертв, я все равно хотел бы его поддержать, если это возможно, но если нет, то с IE7 все в порядке. Я хочу попытаться сохранить его как можно больше с одним элементом — это для навигатора, поэтому я не хочу, чтобы элементы на элементах были только для одной ссылки.
Редактировать
Я решил использовать спрайты, это будет намного проще для навигатора — не лучшее решение, но я буду доволен результатом. Если какие-либо опубликованные решения будут работать, я переключусь на них. 🙂
Ответ №1:
Используйте display:inline-block
с элементом-заполнителем для вертикального центрирования гиперссылки на блок:
<style type="text/css">
#blockbox { width: 500px; height: 500px; border: 1px solid black;}
#container, #placeholder { height: 100%; }
#content, #placeholder { display:inline-block; vertical-align: middle; }
</style>
<div id="blockbox">
<div id="container">
<a id="content">
Vertically centered content in a block box of fixed dimensions
</a>
<span id="placeholder"></span>
</div>
</div>
Ссылки
Ответ №2:
Если вы знаете, что это будет всего одна строка текста, используйте line-height .
Это далеко не один элемент, но вы могли бы просто использовать фактическую ячейку таблицы. Это некрасиво, но поддержка IE6 — уродливое дело.
table {
border: 0;
border-collapse: collapse;
height: 54px;
width: 100px;
}
td {
vertical-align: middle;
}
a {
background: black;
color: white;
display: block;
height: 100%;
text-align: center;
text-decoration: none;
}
<table><tr><td><a href="#">Hello superlongword</a></td></td></table>
Если вы знаете, что ссылка будет состоять из определенного количества строк, вы можете центрировать, используя один дополнительный элемент и поле. (например <a><em>anchor text</em></a>
, em { margin-top:12px }
)
Если вы не знаете высоту элемента, который должен быть центрирован, вам нужно поведение макета ячейки таблицы. Единственный способ получить это в IE6 — использовать фактическую ячейку таблицы или JavaScript. Извините.
Комментарии:
1. Нет, именно поэтому существует «сверхдлинное слово», оно предназначено для того, чтобы быть многострочным, иначе я бы использовал высоту строки.
2. Да, действительно, очень уродливое решение. Я не так беспокоюсь о IE6, display: block; выполняет большую часть этого, но IE7 является обязательным.
Ответ №3:
Это известная ошибка. Способ исправить это, который может быть неприменим в вашей ситуации, — добавить к элементу значение с плавающей точкой и отобразить его как встроенный блок, чтобы заставить hasLayout работать в IE. Я также предоставлю хаки FF2, чтобы обойти проблемы и там.
Исправлен код:
a {
display: inline-block;
display: -moz-inline-stack; /*FF2 Hack*/
zoom: 1; /*IE inline-block star hack*/
*display: inline; /*IE inline-block star hack*/
float: left;
width: 100px;
_height: 54px; /*FF2 Hack*/
background: black;
color: white;
text-align: center;
text-decoration: none;
margin: 0px auto;
}
<a href="#">Hello superlongword</a>
Редактировать
Я не добавлял значение с плавающей точкой, потому что полагал, что при использовании других хаков это не будет иметь значения.
Комментарии:
1. Ему не хватает высоты 54 пикселей и при добавлении… это также не работает в последних браузерах… посмотрите: jsfiddle.net/KqraT/5
Ответ №4:
Почему бы вам не попробовать дополнение?
a {
display: inline-block;
overflow: hidden;
padding: 20px;
background: black;
color: white;
text-align: center;
text-decoration: none;
}
<a>Hello superlongword</a>
Это точно работает кроссбраузерно, по крайней мере, для IE7 (не удалось протестировать на IE6), пример