CSS:悬停以强制元素偏移所需的跨浏览器解决方案
CSS :hover to force element offset cross-browser solution needed
我有一个相当有趣的问题,想知道是否可以纯用CSS来完成。我知道你可以使用webkit-moz转换,或者javascript,但是有其他简单的CSS跨浏览器解决方案吗?
我有一个盒子,里面有一个班级集装箱,上面写着
.container
{
position: absolute;
border: black 1px solid;
top: 100px;
left:100px;
width: 10px;
height: 10px;
}
现在我想做的是在鼠标悬停(CSS悬停)上,在10x10框的大致中心的某个中心点周围将框放大到30px乘30px,当我鼠标悬停时返回到原始容器。大致如下:
.container:hover
{
width: 30px;
height: 30px;
top: 90px;
left:90px;
}
现在的困难在于,top
和Left
的位置被设置到从数据库发送的HTML中,因此不会出现在CSS文件中。
选项是,我从DB数据中动态生成CSS文件,并有效地为每个对象创建一个类(我真的认为这是个坏主意),或者我使用Javascript来管理一些计算onmouseover
和onmouseout
,但这让我觉得不是很优雅。这就是我现在所做的。eeeugh。
伙计们,有更好的CSS解决方案吗?
如果它只是左上角,那么您可以忽略它们,并使用边距将它们四处移动(前提是您知道尺寸)
.container:hover
{
width: 30px;
height: 30px;
margin-left:-10px;
margin-top:-10px;
}
演示http://jsfiddle.net/gaby/CuuNW/
重要的计算是,边距需要与悬停时大小增加的一半相匹配。
因此,30个像素的最终大小减去10个像素的初始大小就是20个像素。您需要偏移(使用边距)20/2=10像素。
我认为Javascript是最优雅的解决方案。
客户端脚本的目的是用于客户端交互,这正是您想要做的
这本身并不能回答您的问题"是否有更好的CSS解决方案",但我认为Javascript是更好的解决方案。一个CSS解决方案最多只能算是一个小技巧,而且可能不会起作用。
您可以通过在stylesheet
中使用!important
来覆盖与HTML
一起发送的top
和left
样式。
.container:hover
{
width: 30px;
height: 30px;
top: 90px !important;
left:90px !important;
}
将.container
封装在数据库中具有left
和top
值的父元素中如何?
考虑到该标记,对于:hover
对.container
的影响,您不需要明确地知道left
和top
,因此可以使用固定值,因为它们将基于.container
的偏移父级的left
和top
来确定。
例如,给定以下标记:
<div class="container-parent">
<div class="container">
...
</div>
</div>
您需要使用top
和left
数据库值来定位.container-parent
。从那里,你的CSS看起来像:
.container-parent{
left:224px; /* from DB */
position: absolute;
top:128px; /* from DB */
}
.container
{
position: absolute;
border: black 1px solid;
top: 100px;
left:100px;
width: 10px;
height: 10px;
}
.container:hover
{
width: 30px;
height: 30px;
top: -15px; /* new width / 2 to center box */
left:-15px; /* new height / 2 to keep things centered */
}
在这里,.container
在数据库中的left
和top
坐标上的显示方式与通常一样,但在:hover
上,它将自身移动-15px到left
和top
。由于它位于定位的父级中,因此这些新的left
和top
值将等于您的原始值-15px。
这就是你想要做的吗?
- 在IE8和其他带有javascript的浏览器中获取正文类的标准解决方案是什么
- 是否有用于CSS浏览器支持新功能的javascript解决方案
- 是否有跨浏览器的解决方案可以在客户端上创建目录
- 关闭浏览器时使用 ajax 执行查询的解决方案
- 什么是在javascript中检测操作系统,浏览器和版本号的广泛解决方案
- 在不刷新的情况下更改页面 URL - 是否有跨浏览器解决方案
- 寻找跨浏览器解决方案来突出显示选项卡
- 用于禁用/启用滚动的跨浏览器解决方案
- 用于替换 event.layerX 和 event.layerY 使用的跨浏览器解决方案
- 是否有跨浏览器的解决方案来监控document.activeElement何时更改
- css悬停大小转换效果需要跨浏览器/回退解决方案
- 我是应该将移动浏览器虚拟视口视为系统性错误,还是有有效的解决方案
- 加载多个图像时用于回调的跨浏览器解决方案
- 仅针对现有公共解决方案,通过浏览器或节点服务器生成Javascript图表或图形
- HTML选择元素-自定义默认值?(跨浏览器解决方案)
- 表单外提交按钮的跨浏览器解决方案
- 响应,跨浏览器和纯Javascript解决方案,以显示一个模态对话框
- 使用SVG文件的跨浏览器解决方案
- JavaScript浏览器端框架/解决方案架构的组件是什么?
- 浏览器多人网络策略-这似乎是一个可行的解决方案