每日思考(2019/12/28)
题目概览
- 对input元素中readonly和disabled属性的理解
- 对line-height是如何理解的?
- 写一个方法验证是否为中文
- 对重绘和重排的理解,以及如何优化?
题目解答
对input元素中readonly和disabled属性的理解
- 含义
- readonly 属性规定输入字段为只读:只读字段是不能修改的。不过,用户仍然可以使用 tab 键切换到该字段,还可以选中或拷贝其文本。readonly 属性可以防止用户对值进行修改,直到满足某些条件为止(比如选中了一个复选框)。然后,需要使用 JavaScript 消除 readonly 值,将输入字段切换到可编辑状态。readonly 属性可与
<input type="text">
或<input type="password">
配合使用 - disabled 属性规定应该禁用 input 元素:被禁用的 input 元素既不可用,也不可点击。可以设置 disabled 属性,直到满足某些其他的条件为止(比如选择了一个复选框等等)。然后,就需要通过 JavaScript 来删除 disabled 值,将 input 元素的值切换为可用。disabled 属性无法与
input type="hidden">
一起使用
- readonly 属性规定输入字段为只读:只读字段是不能修改的。不过,用户仍然可以使用 tab 键切换到该字段,还可以选中或拷贝其文本。readonly 属性可以防止用户对值进行修改,直到满足某些条件为止(比如选中了一个复选框)。然后,需要使用 JavaScript 消除 readonly 值,将输入字段切换到可编辑状态。readonly 属性可与
- 区别
- readonly和disabled作用元素的范围不同:disabled属性可以作用于所有的表单元素。readonly属性只对
<input type="text">
、<input type="number">
、<textarea>
和<input type="password">
等可以输入的表单元素有效 - readonly和disabled对元素的作用程度不同:readonly属性只是将元素设置为只读,可以获取焦点、失去焦点。而disabled属性直接阻止对元素的一切操作。disabled属性阻止对元素的一切操作,例如获取焦点,点击事件等等。
readonly属性只是将元素设置为只读,其他操作正常 - readonly和disabled对表单提交的作用不同:表单元素在使用了disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去,而readonly会将该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据)disabled属性可以让表单元素的值无法被提交。readonly属性则不影响提交问题
- readonly和disabled作用元素的范围不同:disabled属性可以作用于所有的表单元素。readonly属性只对
对line-height是如何理解的?
-
含义:两行文字基线之间的高度距离
-
属性值
值 描述 normal 默认。设置合理的行间距。 number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。 length 设置固定的行间距。 % 基于当前字体尺寸的百分比行间距。 inherit 规定应该从父元素继承 line-height 属性的值。 -
与图片表现
-
行高不会影响图片占据的高度:行高和图文混排,图片会和文字基线baseline对齐 ,所以图片下会有缝隙现象存在。即使没有文字,图片下边缘也还会有空隙
-
消除图片底部间隙的3种方式
- 图片块状化 img
- 图片底线对齐 img
- line-height足够小-基线位置上移 .box
-
-
实际运用
-
单行文字的垂直居中对齐:把line-height值设置为height一样大小的值可以实现单行文字的垂直居中。(其实把line-height设置为您需要的box的大小可以实现单行文字的垂直居中,即可以去除height)
.box{ line-height:20px; }
-
图片水平垂直居中:使用middle后,实际上是不能完全垂直居中。基线向上1/2x高度。不同字体在四线中表现不会完全相同,有下沉的和偏上的
IE8+ .box { line-height:300px; text-align:cneter;} .box>img {vertical-align:middle}
-
多行文本实现水平垂直居中:多行文字水平垂直居中实现的原理上面图片实现的一样,区别在于文本所在的容器的display水平转换成和图片一样,也就是inline-block,以及重置外部所继承的text-align和vertical-align的值
IE8+ .box{line-height:250px; text-align:center;} .box>.text { display:inline-block; line-height:normal; text-align:left; vertical-align:middle; max-width:100%; }
-
代替height,避免IE6/7下的haslayout:在ie6/7下设置高度,会产生haslayout,冲破父元素的高度
/*在ie6/7下设置高度的正确写法*/ .box{ height:36px; line-height:36px; }
-
写一个方法验证是否为中文
-
判断是否全为中文
//方法1 function isChinese(str) { var re=/[^\u4e00-\u9fa5]/; if(re.test(tsr)) return false; return true; } //方法2 function isChinese(str){ var reg=/^[\u4E00-\u9FA5]+$/; if(!reg.test(str)){ return false; } return true; }
-
判断是否含有中文
//方法1 function isChinese(str){ if(/.*[\u4e00-\u9fa5]+.*$/.test(str)) { return false; } return true; } //方法2 function isChinese(str){ var patrn=/[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; if(!patrn.exec(str)){ return false; } return true; } //方法3 function isChinese(str){ //escape对字符串进行编码时,字符值大于255的以"%u****"格式存储,而字符值大于255的恰好是非英文字符 if(escape(str).indexOf("%u")<0){ return false } return true }
对重绘和重排的理解,以及如何优化?
- 重绘:当盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,将内容呈现在页面上。重绘是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。触发重绘的条件:改变元素外观属性。如:color,background-color,font-size等
- 重排(回流):当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建, 这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候。
- 重绘和重排的关系:在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘,所以,重排必定会引发重绘,但重绘不一定会引发重排,任何页面布局和几何属性的改变都会触发重排
- 页面渲染初始化;(无法避免)
- 添加或删除可见的DOM元素;
- 元素位置的改变,或者使用动画;
- 元素尺寸的改变——大小,外边距,边框;
- 浏览器窗口尺寸的变化(resize事件发生时);
- 优化:
- 浏览器的优化:浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。
- 开发的优化:要减少重绘和重排就是要减少对渲染树的操作,则可以合并多次的DOM和样式的修改。并减少对style样式的请求。
- 直接改变元素的className
- display:none;先设置元素为display:none;然后进行页面布局等操作;设置完成后将元素设置为display:block;这样的话就只引发两次重绘和重排;
- 不要经常访问浏览器的flush队列属性;如果一定要访问,可以利用缓存。将访问的值存储起来,接下来使用就不会再引发回流;
- 使用cloneNode(true or false) 和 replaceChild 技术,引发一次回流和重绘;
- 将需要多次重排的元素,position属性设为absolute或fixed,元素脱离了文档流,它的变化不会影响到其他元素;
- 如果需要创建多个DOM节点,可以使用DocumentFragment创建完后一次性的加入document;
【转载文章务必保留出处和署名,谢谢!】
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步