文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

前端进阶:Css必知的几个底层知识和技巧

2024-12-03 16:03

关注

 学习方法推荐

问题学习法:带着问题去学习,有利于集中注意力,目的明确,这既是有意学习的要求,也是发现学习的必要条件。心理学家把注意分为无意注意与有意注意两种。有意注意要求预先有自觉的目的,必要时需经过意志努力,主动地对一定的事物发生注意。它表明人的心理活动的主体性和积极性。问题学习法就是强调有意注意有关解决问题的信息,使学习有了明确的指向性,从而提高学习效率。

在介绍完问题学习法之后,进入我们今天的主题,接下来我会介绍css的一些底层的知识和比较诡异的现象,借此来让大家对css有更深入的理解。

一.css尺寸

1.首选最小宽度–实现复杂图形效果

因此,我们可以根据这个它特性,去实现一些复杂的图形,如下:

 

当鼠标经过时,变成了下面的样子: 

代码如下:

  1. .minW{ 
  2.     display: inline-block; 
  3.     width: 0 
  4.  
  5. .minW::before { 
  6.     content: "love 你 love"
  7.     color: transparent; 
  8.     outline: 2px solid #cd0000; 
  9.  
  10. .minW:hover::before{ 
  11.     content: "你 love 我"
  12.     color: transparent; 
  13.     outline: 2px solid #cd0000; 

我们会发现,当容器宽度设置为0后,由于首选宽度的影响,出现了基于文字空间的形状。

2.2.子元素宽度设为100%时的奇怪现象原理探究

 

  1. .box{ 
  2.     display: inline-block; 
  3.     white-space: nowrap; 
  4.     .text{ 
  5.     display: inline-block; 
  6.     width: 100%; 

理论上父元素宽度应该是子元素宽度之和,但是却出现了上图的现象,原因归根就在于浏览器渲染的顺序:自外而内,这点十分重要。

3.如何让元素支持height:100%效果

方法如下:

4.任意高度元素的展开收起动画(max-height/min-height)

 

要想实现如上图所示的展开收起动画,就可以使用max-height/min-height:

  1. .nav > .sub-nav{ 
  2.     max-height: 0; 
  3.     overflow: hidden; 
  4.     transition: max-height .6s cubic-bezier(.17,.67,.76,1.41) 
  5. .nav:hover > .sub-nav{ 
  6.     max-height: 400px; 

二.内联元素深入探究

常见的内联元素有:display设置为inline,inline-block,inline-table的元素 内联盒模型:

  1. 内容区域:可以理解为文本选中的背景色区域(重点)
  2. 内联盒子:内联标签或者纯文本
  3. 行框盒子:由内联盒子组成的一行,每一行就是一个行框盒子
  4. 包含盒子:由行框盒子组成的盒子 幽灵空白节点:在HTML5文档声明中,内联元素的解析和渲染表现就像每个行框盒子的前面有一个空白节点一样。如下案例所示:

 三.深入理解content

在web中,很多替换元素在没有明确尺寸设定的情况下,其默认的尺寸(不包含边框)为300*150,如video,iframe,canvas等,少数为0,如img,而表单元素的替换尺寸和浏览器自身有关。

对于img元素,如果有css尺寸,则最终尺寸由css尺寸决定(css尺寸 > html尺寸 > 固有尺寸)

当图片的src属性缺省时,图片不会有任何请求,是最高效的实现方式,如下展示的是使用此方式的图片占位代码(对于firefox浏览器,src缺省的img是一个普通的内联元素,宽高设置无效):

  1. img { visibility: hidden; } 
  2. img[src] { visibility: visible; } 

实现换行

  1. ::after
  2.    content: '\A'
  3.    white-space: pre; 

实现正在加载动画


  1. .dot{ 
  2.    display: inline-block; 
  3.    width: 8em; 
  4.    height: 1em; 
  5.    line-height: 1; 
  6.    text-align: left
  7.    vertical-align: -.25em; 
  8.    overflow: hidden; 
  9. .dot::after
  10.    display: block; 
  11.    margin-left: 5.2em; 
  12.    content: '...\A..\A.'
  13.    white-space: pre-wrap; 
  14.    animation: dot 3s infinite step-start both; 
  15. @keyframes dot{ 
  16.    33% { transform: translateY(-3em);} 
  17.    66% { transform: translateY(-2em);} 
  18.    99% { transform: translateY(-1em);} 

属性值内容生成


  1. "icon" data-tip="江小白">
 
  •  
  • .icon::after
  •     content: attr(data-tip); 
  •  4.计数器属性---纯css实现技术器效果

    1. .box1{ 
    2.     counter-reset: count1; 
    3. .xigua:checked::before{ 
    4.     content: counter(count1); 
    5.     counter-increment: count1; 
    6.     position: absolute
    7.     color: transparent; 
    8. .box1::after
    9.     content: counter(count1); 
    10.  
    11. "counter"
    12.     "box1"
    13.         
      西瓜"xigua" type="checkbox" />
       
    14.         
      香蕉"xigua" type="checkbox" />
       
    15.         
      萝卜"xigua" type="checkbox" />
       
    16.     
     
  •  
  • 四.padding深入研究

    对于盒模型设置为box-sizing: border-box的元素,如果padding足够大,那么width将失效:


    1. width: 200px; 
    2. padding-left: 120px; 
    3. padding-right: 120px; 
    4. box-sizing: border-box; 

    对于内联元素,padding对视觉层和布局层都会有影响,如果父元素设置overflow:auto,则内联子元素的垂直padding可能会使父元素出现滚动条,否则如果父元素不设置设置overflow,只会在垂直方向上发生重叠,不会影响布局:


    1.  
    2. .pd-2-1{ 
    3.     overflow: auto; 
    4. .pd-2-1 > span{ 
    5.     padding-top: 1em; 
    6.     padding-bottom: 1em; 

    padding的实际应用(具体实现可自行思考)

    利用padding百分比值实现等比例缩放图片效果:

    1. .pd-3{ 
    2.     padding: 10% 50%; 
    3.     position: relative
    4. .pd-3 img{ 
    5.     position: absolute
    6.     width: 100%; 
    7.     height: 100%; 
    8.     left: 0; 
    9.     top: 0; 

    ** 注:内联元素的垂直padding会让幽灵空白节点显现,此时可考虑设置font-size:0

    padding与图形绘制


    1.   
    2.  .icon-menu{ 
    3.     display: inline-block; 
    4.     width: 120px; 
    5.     height: 10px; 
    6.     padding: 35px 0; 
    7.     border-bottom: 10px solid; 
    8.     border-top: 10px solid; 
    9.     background-clip: content-box; 
    10.     background-color: currentColor; 
    11.  
    12. .icon-dot{ 
    13.     display: inline-block; 
    14.     width: 60px; 
    15.     height: 60px; 
    16.     padding: 10px; 
    17.     border-radius: 50%; 
    18.     border: 10px solid; 
    19.     background-clip: content-box; 
    20.     background-color: currentColor; 

    五.margin深入研究

    使用:nth-type-of(3n)去除子元素尾部margin


    1. .mg-item:nth-of-type(3n){ 
    2.     margin-right: 0; 

    注:如果容器可以滚动,在IE和firefox下会忽略padding-bottom的值,chrome则不会,此时可以通过margin-bottom实现滚动容器的底部留白


    margin合并条件

              margin合并的三种场景

    1. * 解决方案: 父级设置为块级格式化上下文元素 
    2.             父元素设置border-top/bottom值 
    3.             父元素设置padding-top/bottom值 
    4.             父元素设置高度 

    空块级元素margin合并

    margin合并的计算规则

    “正正取大值”,”正负值相加”,”负负最负值”

    深入理解margin:auto

    1. 如果一侧定值,一侧auto,则auto为剩余空间大小
    2. 如果两侧均是auto,则平分剩余空间
    3. 触发margin:auto计算的前提:width或height为定值时,元素是具有自动填充特性的

    1.  
    2. margin-right: 20px; 
    3. margin-left: auto; 
    4.  
    5. margin-right:auto; 
    6. margin-left: auto; 

    绝对定位元素利用margin:auto实现水平垂直居中(兼容到ie8+)


    1. .father{ 
    2.     position: relative
    3. .child-2{ 
    4.     position: absolute
    5.     left: 0; bottom: 0; right: 0; top: 0; 
    6.     width: 40px; 
    7.     height: 20px; 
    8.     margin: auto; 

    *** margin无效情形分析:

    1. display计算值为inline的非替换元素的垂直margin是无效的
    2. 对于内联替换元素,垂直margin有效,并且没有margin合并问题,所以永远不会发生margin合并
    3. 内联特性导致margin失效:一个容器里面有一个图片,图片设置margin-top,随着margin-top负值越来越大,达到某一具体负值时,图片将不再往上偏移

    六.字母x与css中的基线

    1. 基线 字母x的下边缘
    2. x-height 指字母x的高度
    3. ex:ex指小写字母x的高度,是相对单位
    4. vertical-align:middle 指的是基线往上1/2 x-height高度
    1. 内联元素设置对齐方式时,是基于最前面的内联元素的基线,然后根据自己的vertical-align来调整对齐的 

    七.BFC–块级格式化上下文

    表现: 元素内部的布局变化不会影响外部的元素.所以不会出现margin合并,可用来清除浮动的影响.

    触发BFC的条件:

    若元素具备BFC特性,则无需clear:both去清除浮动

    display:table-cell的特性: 宽度设置的再大,也不会超过表格容器的宽度

    overflow裁切界限:border box: 一个设置了overflow: hidden的元素同时设置了padding和border,则子元素超出容器宽高设置时,裁切的边界是border box内边缘而不是padding box内边缘

    在PC端,默认滚动条均来自,PC端滚动高度可以用document.documentElement.scrollTop获取,在移动端用document.body.scrollTop获取

    PC端滚动条宽度约为17px

    让页面滚动条不出现晃动的方法:

    1. html{ 
    2.      
    3.     overflow-y: scroll
    4. :root{ 
    5.     overflow-y: auto; 
    6.     overflow-x: hidden; 
    7. :root body{ 
    8.     position: absolute
    9. body{ 
    10.     width: 100vw; 
    11.     overflow: hidden; 

    多行文本溢出显示省略号的css方法:

    1. .ell-rows-2{ 
    2.     display: -webkit-box; 
    3.     -webkit-box-orient: vertical; 
    4.     -webkit-line-clamp: 2; 

    八.relative难点解析

    relative的定位位移是相对于自身的,如果left/top/right/bottom的值为百分比单位,则计算尺寸是基于父元素

    如果left/right 或top/bottom这些对立属性同时出现时,只有一个方向的属性会生效,优先级与文档流的顺序有关,默认的文档流是自上而下,从左到右的,所以top优先级高于bottom,left优先级高于right

    relative的最小化原则

    层叠上下文

    1. 1.flex 
    2. 2.opacity不为1 
    3. 3.transform不为none 
    4. 4.mix-blend-mode不为normal 
    5. 5.filter不为none 
    6. 6.isolation是isolate 
    7. 7.will-change为上面2-6的任意一个 
    8. 8.元素-webkit-overflow-scrolling设为touch 

    可访问性隐藏

    ie8下的多背景隐藏

    好啦,关于css的知识还有很多,有些问题也很难通过表象去解决,这个时候,让你脱颖而出的就是你对代码底层更深入的理解了。

     

    来源:趣谈前端内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯