【发布时间】:2023-04-11 10:50:02
【问题描述】:
在玩过 CSS 3 之后,我有了一个疯狂的想法,就是用它制作一个 OS X 风格的 Dock(一个 DIV 容器,里面有元素,它使用 CSS :hover 子类,在鼠标悬停时会增加大小)。但是,我在实现它时遇到了一些奇怪的效果。到目前为止,这是我尝试过的:
代码
<html>
<head>
<style>
body{
margin:0;
}
.dockHolder{
width:100%;
position:absolute;
text-align:center;
display:block;
bottom:0;
}
.dock{
margin-left:auto;
margin-right:auto;
bottom:0;
text-align:center;
}
.dockItem{
height:50%;
display:inline-block;
position:relative;
bottom:0;
vertical-align:bottom;
text-align:center;
transition-property:width, height;
-o-transition-property:width, height;
-moz-transition-property:width, height;
-webkit-transition-property:width, height;
transition-duration:.25s;
-o-transition-duration:.25s;
-moz-transition-duration:.25s;
-webkit-transition-duration:.25s;
transition-timing-function:linear;
-o-transition-timing-function:linear;
-moz-transition-timing-function:linear;
-webkit-transition-timing-function:linear;
}
.dockItem:hover{
height:100%;
width:auto;
}
</style>
</head>
<body>
<div class="dockHolder" style="height:64px;max-height:64px;border:1px solid black;">
<div class="dock" style="background-color:lightgray;">
<center>
<div class="dockItem" style="background-color:magenta;"><img height="100%" src="pony.png" /></div>
<div class="dockItem" style="background-color:magenta;"><img height="100%" src="bhs256.png" /></div>
</center>
</div>
</div>
</body>
</html>
如果你想看看我目前有什么,我的测试页面位于 http://s.supuhstar.operaunite.com/s/content/testAnims.htm(死于 Opera Unite)。
缺少功能
意外影响包括:
- 无法将
dock元素放在dockHolder元素的底部 -
dockItem元素不随其子图像横向扩展 -
dockItem和dock元素不会在带有 CSS 的dockHolder容器内居中(尝试过margin:auto;、box-pack:center;、box-align:center;等);只有<center>HTML 标签有效 - 在 Opera 和 Firefox(我已经放弃 IE)中,
dockItems 非常广泛
预期效果包括:
-
dockItems 保持在dock元素中直到调整大小,此时它们与dockHolder元素的大小成比例地增加,但dock元素保持相同的大小 -
dock元素的宽度始终仅足以包含其中的所有dockItems,并且永远不会比所有dockItems 及其边距的组合宽度更宽。
问题
有没有人有解决方案可以修复意外效果并实现缺少的预期效果?
最终实现
下面是我最终解决方案的代码:
<!DOCTYPE html><html>
<head>
<style type='text/css'>
body{
margin:0;
}
.dockHolder {
position: fixed;
text-align: center;
bottom: 0;
left: 0;
right: 0;
height: 128px;
line-height: 128px;
}
.dock {
background:#CCCCCC;
background:
-o-linear-gradient(top, #AAA 0, #CCC 49%, #AAA 51%, #808080 100%);
background:
-moz-linear-gradient(top, #AAA 0, #CCC 49%, #AAA 51%, #808080 100%);
background:
-webkit-linear-gradient(top, #AAA 0, #CCC 49%, #AAA 51%, #808080 100%);
border: 1px solid gray;
max-width:100%;
vertical-align: bottom;
line-height: 1em;
padding: 0 8px;
border-radius: 100%;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.dockItem {
display: inline;
height: 50%;
vertical-align: bottom;
transition-property:width, height;
-o-transition-property:width, height;
-ms-transition-property:width, height;
-moz-transition-property:width, height;
-webkit-transition-property:width, height;
transition-duration:.25s;
-o-transition-duration:.25s;
-ms-transition-duration:.25s;
-moz-transition-duration:.25s;
-webkit-transition-duration:.25s;
transition-timing-function:ease-in-out;
-o-transition-timing-function:ease-in-out;
-ms-transition-timing-function:ease-in-out;
-moz-transition-timing-function:ease-in-out;
-webkit-transition-timing-function:ease-in-out;
}
.dockItem:hover {
height: 100%;
}
.dockItem:active {
vertical-align:top;
height:95%
}
</style>
</head>
<body>
<div class="dockHolder" style="height:128px;line-height:128px;">
<span class="dock">
<img class="dockItem" src="pony.png"/>
<img class="dockItem" src="bhs256.png"/>
<img class="dockItem" src="mcgrass.png"/>
</span>
</div>
</body>
</html>
工作示例(可能会过时):http://admin.s.supuhstar.operaunite.com/s/content/testDock.html(死于 Opera Unite)
【问题讨论】:
-
我知道。继续阅读;我试过 CSS 居中
-
你为什么同时使用
style属性和.docHolder元素的CSS规则? -
.dock元素在哪里?我只在您的 HTML 代码中看到.dockHolder和.dockItem元素。 -
这样我就可以看到
dockHolder在哪里。其结果是最终用户看不到它,但这在现阶段适得其反。我还在dock中使用style属性,以便使用此API 的人可以选择自己的停靠颜色和高度(我不喜欢这样的任意选择)。我只在dockItems 中使用它来进行调试。 -
@ŠimeVidas 抱歉,我一定是在编辑时删除了它……它是
dockHolder中的第一个元素,它包含dockItems
标签: html css cross-browser dock