伪Textatea的构建(div+table),以及相应的滚动条问题与safari上的优化
在页面中创建一个不可编辑的文本块,并且文本块的篇幅较大,第一反应是创建一个textarea,并将它的disabled="disabled",并设置相应的scroll属性,就可以构建一个尚可的文本块。
但这样的文本块存在许多的问题,最为严重的是textarea内部只允许纯文本,并不能识别html标签(较新的ie浏览器可识别标签,但包括chrome在内的主流浏览器不能识别),所以,一些特定的格式无法很好表达。并且,在一些版本的ie浏览器上,当设置disabled="disabled"后,滚动条也将被禁用,影响文本的正常阅读。参考了一些主流的做法,感觉比较可行的是div+table的布局方案。示例代码如下:
<div id="div_get" style="width:700px;overflow:scroll;height:400px;overflow-x:hidden">
<table id="tb_get" style="width:700px;" >
</table>
</div>
首先创建一个div,设置这个层的长与宽,设置overflow:scroll,表示当层中的内容大于层所设置的大小后,启用滚动条进行拓展,overflow-x:hidden为禁用纵向的滚条,这里只是为了美观目的。创建层后,通过向层内添加html,一定程度上已经完成了Textatea关于实现不可编辑文本块的功能。但为了方便布局,以及从数据库中抓取数据用AJAX填入,我又用到了table,在这里我只是设置了表格的宽度。在pc端的主流浏览器中一切正常,但放到iphone的safari测试时,发现滚动条并不是停在预期的位置,而是卡在某处,通过对浏览器中的scrollHeight的比较,iphone上的长度会长于其他浏览器,走了各种弯路后发现,需要设置table的长度,可以有效防止滚动条的位置超出预期。至于长度,建议与对应层的长度相同。
由于需要,当AJAX放入内容,需要将滚动条定位到最下方,可以通过以下js实现:
document.getElementById("id").scrollTop = document.getElementById("id").scrollHeight;
这里的id是div的,注意不是table的
考虑到,当用户阅读内容,如果AJAX刷新,直接将滚动条移到最下方,十分不友好,于是乎,加一判断条件document.getElementById("id").scrollTop == 0,仅当滚动条在最上方时执行此操作(刷新完滚动条一般在最上处,而用户阅读时,滚动条移位,则不触发这项操作)。
伪Textatea的构建(div+table),以及相应的滚动条问题与safari上的优化的更多相关文章
- 功能整合(一):滚动条的变相隐藏、js控制div的渐变显示、滚动条监听
1.滚动条的变相隐藏 思路: 1. 把body的横向,纵向的超出部分隐藏,宽设置100%:高设置100%.就没有body的滚动条了, 2. 然后把最外层的div的宽设置的比body的宽宽一点,把d ...
- table设置表格有滚动条
table 设置表格有滚动条. 少说多做,代码中有注释: <!DOCTYPE HTML> <html> <head> <meta http-equiv=&qu ...
- div里面的元素在【垂直 方向】上水平分布 使用calc()函数动态计算
1==>如何让div里面的元素在[垂直 方向]上水平分布.important-dec{ height: 121px; //必须固定高度 flex-direction: column; //垂直排 ...
- css+div table
div+css table表格样式 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- 用伪类实现一个div的宽度和高度是固定百分比
遇到一个题目:一个div宽度是固定百分比的情况下,如何设置高度是宽度的80% 看到题目的第一反应是用js控制,获取到div的宽度之后再用宽度的80%来设置div的高度,但是如何在不用js的情况下,只用 ...
- 以KeyValue形式构建Lua Table
Key为字符串 -- 定义一个key,value形式的table local kv = {fruit = "apple", bread = "french", ...
- 如何使用css伪类,实现div左上角出现封面等提示信息
HTML <div class="ui-cover-tip”><div> CSS .ui-cover-tip{ position: relative; width: ...
- DIV内容超出长度显示省略号,鼠标移上自动显示全部内容(EasyUI DataGrid)
如果想把DIV中超出的文本显示成省略号,而不是换行全部显示,有2个办法. 注:本文主要是以EasyUI的DataGrid为案例的,如果是其他场景只要底层是用DIV显示文本的应该都能使用. 首先可以给此 ...
- DIV实现水平或垂直滚动条
添加样式: 在html中,需要创建2层div来实现.一个div包含另一个div: 效果:
随机推荐
- 解决Android studio导入项目卡死
在使用Android studio的时候常常遇到这样的问题,从github或是其他地方导入项目,Android studio呈现卡死的现象!当遇到这种情况时,可以看看是下面那种情况,在按照方法来解决! ...
- [ActiveMQ]初识ActiveMQ
初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:htt ...
- c语言socket通信
http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html
- 高性能MySQL(一):基本数据类型
更多交流及资料,请加群 :
- 解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题
问题产生原因:加载Realm时其他Spring配置文件(xml)尚未加载,导致注入失败. 解决方法:编写一个设置类把注入工作提前完成. package com.xkt.shiro import org ...
- js:使用js过程中遇到的一个小问题
在一个作业中使用了js,函数A调用函数B.当A和B中均含有变量i的时候,相关操作结果可能会出错. 将B中的i替换为j(j不存在于A中)后,结果正确. 目前考虑原因是两个变量i有相关性(或者说实际上就是 ...
- 【原创】node+express+socket搭建一个实时推送应用
技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...
- druid配置数据库连接使用密文密码
spring使用druid配置dataSource片段代码 dataSource配置 <!-- 基于Druid数据库链接池的数据源配置 --> <bean id="data ...
- 【Django】--ModelForm组件
ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...
- 21. Merge Two Sorted Lists —— Python
题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...