感谢大家的及时反馈,非常有帮助。仍然存在一个问题:line-height
和padding
似乎都无法将两个文本居中,这些文本足够长,可以包含适合的和文本当应用于表格单元格时,整齐地位于图片中间的一行上。
奇怪的是,SwDevMan81下面提供的填充解决方案在应用于div时效果不错,但不适用于表格单元格...
我提前为我的天真道歉;这是我第一次涉足HTML和CSS。
该表的代码如下:
<table border="1">
<tr>
<td class="imgcontainer">
<a href="#">
<img src="http://www.bigjimsburgers.com/burger.jpg" alt="" />
<span class="desc">
Very long text that wraps around and is centered properly
</span>
</a>
</td>
<td class ="imgcontainer">
<a href="#">
<img src="http://www.bigjimsburgers.com/burger.jpg" alt="" />
<span class="desc">
misaligned text
</span>
</a>
</td>
</tr>
<tr>
<td class="imgcontainer">
<a href="#">
<img src="http://www.bigjimsburgers.com/burger.jpg" alt="" />
<span class="desc">
misaligned text
</span>
</a>
</td>
<td class ="imgcontainer">
<a href="#">
<img src="http://www.bigjimsburgers.com/burger.jpg" alt="" />
<span class="desc">
Very long text that wraps around and is centered properly
</span>
</a>
</td>
</tr>
</table>
<style type="text/css">
.imgcontainer {
overflow: hidden;
text-align: center;
}
.imgcontainer img {
float: left;
background: #fff;
width: 200px;
height: 200px;
}
.imgcontainer a .desc {
display: none;
font-size: 1.0em;
}
.imgcontainer a:hover {
cursor: pointer;
text-decoration: none;
}
.imgcontainer a:hover .desc {
display: -webkit-box;
display: -moz-box;
display: box;
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
background: #DDD;
filter: alpha(opacity=75);
opacity: .75;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
position: absolute;
width: 200px;
height: 200px;
}
</style>
答案 0 :(得分:3)
这是一个现场演示:
这是新的CSS:
imgcontainer {
overflow: hidden;
float: left;
position: relative;
}
.imgcontainer img {
float: left;
padding: 5px;
background: #fff;
width: 500px;
height: 500px;
}
.imgcontainer a .desc {
display: none;
font-size: 1.2em;
}
.imgcontainer a:hover {
cursor: pointer;
text-decoration: none;
}
.imgcontainer a:hover .desc {
display: block;
text-align: center;
width:500px;
line-height:500px;
background: #111;
filter: alpha(opacity=75);
opacity: .75;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
color: #fff;
position: absolute;
top: 0px;
left: 0px;
width: 500px;
height: 500px;
}
答案 1 :(得分:3)
你不必为天真而道歉。 垂直居中是CSS中最容易被误解的部分之一..不幸的是,虽然有一个简单的解决方案 - 使用table display properties
- IE7及以下版本不支持它们。< / p>
因此,他们需要某种形式的黑客攻击,你的支持要求是什么?
我所拥有的最佳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支持
在HTML中的<i></i>
和img
之间添加span
元素,如下所示:
<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]-->
OR - 没有额外的HTML元素或正确的垂直居中
如果您不想为IE6 / 7添加额外的HTML <i></i>
元素,您可以将第一个解决方案与顶部填充解决方案结合起来,这不会完全垂直居中文本,但应该提供优雅IE6 / 7的后退。
在这种情况下,IE条件CSS将如下所示:
<!--[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
的{{1}}不会继承父表上的display: table-cell;
答案 2 :(得分:1)
您也可以使用padding执行此操作。这将处理包装文本。
.imgcontainer {
overflow: hidden;
float: left;
position: relative;
}
.imgcontainer img {
float: left;
padding: 5px;
background: #fff;
width: 500px;
height: 500px;
}
.imgcontainer a .desc {
display: none;
font-size: 1.2em;
padding: 50% 0;
}
.imgcontainer a:hover {
cursor: pointer;
text-decoration: none;
}
.imgcontainer a:hover .desc {
display: -webkit-box;
display: -moz-box;
display: block;
-webkit-box-align: center;
text-align: center;
background: #111;
filter: alpha(opacity=75);
opacity: .75;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
color: #fff;
position: absolute;
top: 0px;
left: 0px;
width: 500px;
height: 500px;
}
答案 3 :(得分:0)
使用display:block
,display:box
无效。这将修复水平居中。
垂直居中有点棘手,因为html并不意味着关注页面的美观布局,只是横向。
答案 4 :(得分:0)
这是另一种方式。但是在IE6中不起作用。
<强> CSS:强>
* { margin:0; padding:0 }
.desc { position:relative; display:inline-block }
.desc img { vertical-align:middle }
.desc span { position:absolute; left:0; width:100%; height:100%; line-height:100px; background:black; text-align:center; color:white; display:none }
.desc:hover span { display:inline-block }
<强> HTML:强>
<a href="#" class="desc">
<img src="http://www.uploadarchief.net/files/download/troll_face.jpg" width="100" height="100" alt="" />
<span>Description</span>
</a>