如何使文本选择平滑的地方div布局在以下格式http://jsfiddle.net/SQ39f/2/。你可以看到,在选择过程中,选择突出显示跳到顶部并闪烁。尝试选择文本"SECOND LINE"也不是说我不能控制位置,左和顶部样式属性,因为它们是由第三方设置的,我可以添加额外的样式。
<div>
<div style="position:absolute ;left: 100.178px; top: 10.523px">FIRST</div>
<div style="position:absolute;left: 180.61px; top: 10.523px;">LINE</div>
<div style="position:absolute; left: 100.178px; top: 30.523px;">SECOND</div>
<div style="position:absolute; left: 190.61px; top: 30.523px;" >LINE</div>
我是这么想的:
HTML——<div>
<div class="tag" style="position:absolute;left:100.178px;top:10.523px;">FIRST</div>
<div class="line" style="position:absolute;left:180.61px;top:10.523px;">LINE</div>
<div></div>
<div class="tag" style="position:absolute;left:100.178px;top:30.523px;">SECOND</div>
<div style="position:absolute;left:160.61px;top:30.523px;display:none;" > </div>
<div class="line" style="position:absolute;left:180.61px;top:30.523px;" >LINE</div>
</div>
CSS——.tag {
width:81px;
height:18px;
}
.line {
padding-right:100px;
height:18px;
}
设置height:18px;
使选择高度归一化;设置width:81px
弥合左和右div
之间的差距,使它们接触,但不重叠。不需要充满不间断空格的div
,因此我将其display
设置为none
。如果可以,完全删除该元素。
通过在第一个"line"div
和"second"div
之间添加div
来防止第二行跳转到第一行。这就像行与行之间的间隔符,所以当选择跳转到之前的div
时,您不会看到任何图形变化。
padding-right:100px
扩展了div
的框,并允许您将光标进一步拖动到文本的右侧,并且仍然保持对该行的选择。我不建议将其设置在10px
以下,否则在选择第二行时,您可能会在第一行的最后一个字符上闪烁。
只要正确地重复这些类,并在每个div.line
和下面的div.tag
之间添加间隔符div
,该方法应该适用于任何行数。
演示:http://jsfiddle.net/SQ39f/10/
要扩展我关于扩展div以消除间距的评论,这里有一些css可以添加到您的示例页面中。
设置div的宽度以覆盖左右两列之间的间隙。我已经将边框、边距和内边距归零,并设置行高,使其看起来整洁:
div { border: 0; margin: 0; padding: 0; line-height: 18px; }
div div { width: 81px; height: 18px; }
小提琴:http://jsfiddle.net/SQ39f/18/
如果你事先知道文本是什么样子的(例如,如果你有一个结果表),这是最简单的选择。
如果行没有统一布局,您可以使用javascript计算div的适当宽度——遍历左边的div,从下一个兄弟的位置减去"左"位置。这很容易用JQuery实现。
您必须将绝对定位替换为相对定位。我使用下面的jQuery实现了这一点,但如果有必要,也可以直接用javascript完成。
$(document).ready(function() {
$('div[style*="position"]').each(function() {
var $this = $(this);
if ($this.css('position') === 'absolute') {
var offset = $this.offset();
$this.css('position', 'relative');
$this.offset(offset);
}
});
});
在这里工作:http://jsfiddle.net/k24p90jh/1/
试试这个解决方案JSFiddle链接
<table>
<tr>
<td>FIRST</td>
<td>LINE</td>
</tr>
<tr>
<td>SECOND</td>
<td>LINE</td>
</tr>
</table>
它呈现/显示相同的方式,只是不同的代码,并修复你的突出显示问题。表格就像普通的div标签,只是要确保没有边框(border="0")。希望对您有所帮助=)
首先你需要摆脱position: absolute
来改善选择,无论如何我猜这是不可能的?在这种情况下,我想到的唯一解决方案是在下一部分文本之间创建白色填充' '
演示:http://jsfiddle.net/SQ39f/3/