javascript - 如何水平扩展内联跨度的可点击区域?

标签 javascript css html

我有两个跨度,都在单击时触发一个 Action :

<div>
    <span>This is a multiline<br/>
    chunk of text.</span>  <span>And this is a <br/>
    second one.</span>
</div>

我希望用户能够单击包含的 div(其样式看起来像一个框)中的任意位置,并将单击与一个或另一个 span 相关联。现在,用户必须点击实际文本才能触发点击事件。

它是这样的:http://jsfiddle.net/bJJLF/1/ .

我希望跨度看起来像一个段落(即,所以我可能需要保持它们的样式 display: inline )。会有换行符,但我很灵活:它们是如何创建的(所以我可以在必要时杀死 </br> s)。

是否有一个我缺少的简单的 css 解决方案,或者我是否必须在周围的框上放置一个点击处理程序并进行坐标计算以确定点击属于哪个跨度?

最佳答案

好的,所以我找到了一个到目前为止看起来还不错的纯 css 解决方案。任何改进它的建议都会有所帮助。现在的主要约束是您需要知道包含框的宽度,这是我可以处理的约束。

想法是在 span 上创建一个绝对定位的伪前元素。你给它一个比 span 低的 z-index,你将它的高度设置为 span 高度的 100%,将 left 设置为 0,宽度等于容器的宽度:

span:before {
  content: '';
  display: inline-block;
  z-index: 1;
  width: 400px;
  height: 100%;
  position: absolute;
  left: 0px;
}

跨度必须相对定位:

span {
  z-index: 2;
  position: relative;
}

这是更新后的示例(现在带有悬停效果!):http://jsfiddle.net/bJJLF/7/

关于javascript - 如何水平扩展内联跨度的可点击区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15889439/

相关文章:

javascript - jQuery:匹配多个元素但只执行一个动画

javascript - 如何使用 Javascript 更改多个 HTML 文档的背景颜色

css - 如何计算滚动 div 中的元素位置?

javascript - Discord.js 时间相关事件

c# - Asp.net mvc 应用程序在用户登录前抛出 js 语法错误

javascript - 使用 ng-repeat 时如何计算行总数?

jquery - 使用 jquery 更改标题外观

javascript - 在 Javascript 中绘制随机的、不重叠的 div

javascript - 根据另一个对象的数据创建一个对象(添加一个 "level")

CSS 5 张图片中的一张没有与其他图片对齐