• 每日思考(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和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属性则不影响提交问题

    对line-height是如何理解的?

    • 含义:两行文字基线之间的高度距离

    • 属性值

      描述
      normal 默认。设置合理的行间距。
      number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。
      length 设置固定的行间距。
      % 基于当前字体尺寸的百分比行间距。
      inherit 规定应该从父元素继承 line-height 属性的值。
    • 与图片表现

      • 行高不会影响图片占据的高度:行高和图文混排,图片会和文字基线baseline对齐 ,所以图片下会有缝隙现象存在。即使没有文字,图片下边缘也还会有空隙

      • 消除图片底部间隙的3种方式

        • 图片块状化 img {display:block;}
        • 图片底线对齐 img {vertical-align:bottom;}
        • line-height足够小-基线位置上移 .box {line-height:0;}
    • 实际运用

      • 单行文字的垂直居中对齐:把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-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;
  • 相关阅读:
    ZQUOJ 1964 Hamilton回路(状压dp)
    ZQUOJ 1398 Hamilton路径(DFS,稀疏图,n≤40)
    2019 CCPC
    百度之星初赛第三场 1002 最短路2 (Floyd算法优化)
    2019牛客暑期多校训练营(第四场)J free(分层图最短路/模板题)
    2019牛客暑期多校训练营(第一场)I Points Division(DP+线段树)
    2019牛客暑期多校训练营(第七场)A String(枚举)
    2019牛客暑期多校训练营(第九场)B Quadratic equation(欧拉准则+解二次剩余)
    二次剩余系解法
    二次剩余的判断(欧拉准则)
  • 原文地址:https://www.cnblogs.com/EricZLin/p/12116512.html
Copyright © 2020-2023  润新知