Вам не нужно извиняться за наивность. Вертикальное центрирование - одна из наиболее неправильно понятых частей CSS ... и, к сожалению, хотя существует простое решение - использовать table display properties
- они не поддерживаются IE7 и ниже ..
Так что им нужна какая-то форма взлома, каковы ваши требования к поддержке?
Оптимальное решение IE, которое у меня есть, включает в себя взлом как HTML, так и CSS (и для них полезен дополнительный элемент HTML)
Вот код, который должен работать без IE6 / 7 поддержки:
HTML такой же, как у вас выше
CSS:
table {
table-layout: fixed;
width: 403px;
border-collapse: collapse;
border-spacing: 0;
}
.imgcontainer {
text-align: center;
padding: 0;
vertical-align: middle;
border: 1px solid #000;
}
.imgcontainer img {
float: left;
width: 200px;
height: 200px;
border: 0;
}
.imgcontainer a {
display: block;
width: 200px;
height: 200px;
overflow: hidden;
cursor: pointer;
text-decoration: none;
}
.imgcontainer a:hover img {
margin-right: -200px;
}
.imgcontainer a .desc {
display: table-cell;
vertical-align: middle;
border-spacing: 0;
border-collapse: collapse;
width: 200px;
height: 200px;
padding: 10px;
background: #cfc;
}
.imgcontainer a:hover .desc {
background: #DDD;
opacity: .75;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
}
Рабочий пример: ЗДЕСЬ
и: с оптимальной поддержкой IE6 / 7
добавить элемент <i></i>
между img
и span
в HTML следующим образом:
<td class ="imgcontainer">
<a href="#">
<img src="http://www.bigjimsburgers.com/burger.jpg" alt="" />
<i></i>
<span class="desc">misaligned text</span>
</a>
</td>
Тогда условный CSS: (добавить на лист, который идет после основного материала выше)
<!--[if LTE IE 7]>
<style type="text/css" media="screen">
.imgcontainer i {
display: inline-block;
width: 200px;
height: 200px;
line-height: 200px;
background: #DDD;
filter: alpha(opacity=75);
vertical-align: middle;
margin-right: -200px;
}
.imgcontainer a .desc {
display: none;
width: 180px;
height: auto;
}
.imgcontainer a:hover .desc {
display: inline-block;
background: transparent;
}
</style>
<![endif]-->
ИЛИ - без дополнительного элемента HTML или правильного вертикального центрирования
Если вы не хотите добавлять дополнительный элемент HTML <i></i>
для IE6 / 7, вы можете объединить первое решение с решением с верхним отступом, которое не будет идеально центрировать текст по вертикали, но должно обеспечить плавное падение. назад для IE6 / 7.
В этом случае условный CSS IE будет выглядеть следующим образом:
<!--[if LTE IE 7]>
<style type="text/css" media="screen">
.imgcontainer a .desc {
display: none;
padding: 40px 10px 10px 10px;
width: 180px;
height: 150px; /* if adding to top padding, adjust height accordingly */
}
.imgcontainer a:hover .desc {
display: inline-block;
filter: alpha(opacity=75);
}
</style>
<![endif]-->
Обновление
в соответствии с комментариями, чтобы это работало и сохранял интервал границы в родительской таблице, вы должны удалить таблицу CSS
table {
/*
table-layout: fixed;
width: 403px;
border-collapse: collapse;
border-spacing: 0;
*/
}
, а затем ДОБАВИТЬ border-spacing: 0;
к a
.imgcontainer a {
display: block;
width: 200px;
height: 200px;
overflow: hidden;
cursor: pointer;
text-decoration: none;
border-spacing: 0;
}
добавление вышеуказанного означает, что span
, установленный на display: table-cell;
, не наследует border-spacing
в родительской таблице