金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > web前端 > 清除浮动进化史,深刻理解

清除浮动进化史,深刻理解

发布时间:2019-11-06 11:56编辑:web前端浏览(110)

    深刻理解 background-position 中的百分比

    2015/11/02 · CSS

    本文由 伯乐在线 - risker 翻译。未经许可,禁止转载!
    英文出处:vjeux。欢迎加入翻译组。

    通过这篇文章我要教大家解决一个曾经很困扰我的麻烦问题。我们要使用百分比的 background-position值来解决一些问题。

    clearfix 清除浮动进化史

    2016/04/27 · CSS · CSS, 浮动

    原文出处: 520ued   

    我想大家在写CSS的时候应该都对清除浮动的用法深有体会,今天我们就还讨论下clearfix的进化史吧。

    图片 1

    移动前端第二弹:善用meta

    2016/04/19 · CSS · Meta

    原文出处: 杜瑶(@doyoe)   

    通常使用方法

    1. 摆放图片 通常在容器里摆放图片是给出具体图片的topleft相对容器的topleft的值。 图片 2
    2. 在CSS中很容易做到。
    JavaScript
    
    * 在容器里使用`<img>`标签 .container{
    
    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f6d12010c3463746966-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d12010c3463746966-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f6d12010c3463746966-3">
    3
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f6d12010c3463746966-1" class="crayon-line">
        *   在容器里使用`&amp;amp;amp;lt;img&amp;amp;amp;gt;`标签
    </div>
    <div id="crayon-5b8f6d12010c3463746966-2" class="crayon-line crayon-striped-line">
    .container{
    </div>
    <div id="crayon-5b8f6d12010c3463746966-3" class="crayon-line">
     
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>
    
    
    `</pre> position:relative; } .container img{ position:absolute; top:12px; left:20px; }`  
    
    
    JavaScript
    
    * 或者可以使用`background-position`&lt;pre&gt;`.container{
    
    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f6d12010cc478883379-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d12010cc478883379-2">
    2
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f6d12010cc478883379-1" class="crayon-line">
    *   或者可以使用`background-position`&amp;lt;pre&amp;gt;`.container{
    </div>
    <div id="crayon-5b8f6d12010cc478883379-2" class="crayon-line crayon-striped-line">
     
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>
    
    
    background-position:12px 20px; }`
    
    1. 在容器里移动现在你想让图片在容器里面移动而且还不能超出容器边界。你肯定是要简单算一算图片topleft的最大值。图片 3然后得到left值的范围是 0 到 container_width - image_width,同样也可以得到top值的范围。
    2. 图片比容器大到目前为止,我们讨论的问题都很简单。现在,我们要看看图片比容器大的情况。容器必须要被图片填满。图片 4同样我们可以算出left值的范围是 0 ~ container_width - image_width,只不过这次container_width - image_width 是负值。你可以搞明白正值和负值的关系,也可以凭直觉搞定。当你看到12px 20px你很容易知道图片是怎么放置的。但是,你看到-12px -20px就比较难想明白了。
    3. 不变量好了,现在你已经写好了位置点并且没有任何问题。现在,因为某些原因,我们不用长方形容器了,用正方形容器。那么之前的那些位置值就不那么合适了。我们之前计算的值不再有效,因为现在情况变了。你想要改变图片和容器大小也是一样的道理。图片 5可以从图中看到,如果使用固定的值,那么一旦改变某些条件,那么就可能会让已经写好的布局乱掉。

      背景图片的百分比方法

    4. 定义我们要换一个确定图片位置的方法了。当图片的左边框和容器的左边框挨着时,left0%。当图片右边框和容器的右边框挨着时,left100%。这两个例子分别就是 0% 和 100% 的情况:图片 6我们很容易得到两者之间的值

    JavaScript
    
    `left = (container_width - image_width) * percentage
    
    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f6d12010d1355851788-1">
    1
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f6d12010d1355851788-1" class="crayon-line">
    `left = (container_width - image_width) * percentage
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>
    
    
     
    
    1. 范围检测这个方法最方便的就是我们不用再算图片相对容器的范围。它就是 0 ~ 100 。
    2. 不变量我们画两个轴,一个对于容器,一个对于图片。如果我们设置值为60%,则两个轴的60%会重合在一个点上。图片 7就像上面的图片一样,这个新的方法在不同比例大小情况下也工作得很好。
    3. 水平和垂直如果你细心的话你会注意到图片和容器一样大的话,两个轴会完全重合。设置 30% 还是 80% 都不重要。图片 8再看看数学公式
    JavaScript
    
    `left = (container&lt;em&gt;width - image_width) &lt;/em&gt;
    percentage = 0 _ percentage = 0
    
    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f6d12010d5992620587-1">
    1
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f6d12010d5992620587-1" class="crayon-line">
    `left = (container&lt;em&gt;width - image_width) &lt;/em&gt; percentage = 0 _ percentage = 0
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>
    

    你只需要设置两个值lefttop就行了。

    clearfix清除浮动

    首先在很多很多年以前我们常用的清除浮动是这样的。

    CSS

    .clear{clear:both;line-height:0;}

    1
    .clear{clear:both;line-height:0;}

    现在可能还可以在很多老的站点上可以看到这样的代码,相当暴力有效的解决浮动的问题。但是这个用法有一个致命伤,就是每次清除浮动的时候都需要增加一个空标签来使用。

    这种做法如果在页面复杂的布局要经常清楚浮动的时候就会产生很多的空标签,增加了页面无用标签,不利于页面优化。但是我发现大型网站中 居然还在使用这种清楚浮动的方法。有兴趣的同学可以上他们首页搜索一下他们的.blank0这个样式名称。

    因此有很多大神就研究出了 clearfix 清除浮动的方法,直接解决了上面的缺陷,不需要增加空标签,直接在有浮动的外层加上这个样式就可以了,这也是我们今天要讨论的clearfix进化史。

    前言

    在移动前端第一弹:viewport详解中,我们讲了viewport,那是一个关于meta的故事。这次我们会就将meta这个故事讲得更广阔、更有意思一些。

    写过HTML的童鞋,应该都对这个不陌生,或用它来定义页面编码,或用它来定义搜索引擎抓取方式,或用它定义页面关键字,描述等等。

    总结

    一开始,我没有明白百分比值是怎么对background-position作用的。我真的有点迷惑,因为使用百分比让我不能直观地感受到变化。然而,后来我发现使用百分比解决图片定位是极其方便的。

    我的博客,欢迎订阅

    微博粉丝太少,求粉

    1 赞 3 收藏 评论

    起源

    CSS

    .clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } .clearfix { display: inline-table; } * html .clearfix { height: 1%; }//Hides from IE-mac .clearfix { display: block; }//End hide from IE-mac

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .clearfix:after {
        visibility: hidden;
        display: block;
        font-size: 0;
        content: " ";
        clear: both;
        height: 0;
    }
    .clearfix { display: inline-table; }
     
    * html .clearfix { height: 1%; }//Hides from IE-mac
    .clearfix { display: block; }//End hide from IE-mac

    解释一下以上的代码:

    • 对大多数符合标准的浏览器应用第一个声明块,目的是创建一个隐形的内容为空的块来为目标元素清除浮动。
    • 第二条为clearfix应用 inline-table 显示属性,仅仅针对IE/Mac。利用 * 对 IE/Mac 隐藏一些规则:
    • height:1% 用来触发 IE6 下的haslayout。
    • 重新对 IE/Mac 外的IE应用 block 显示属性。
    • 最后一行用于结束针对 IE/Mac 的hack。(是不是觉得很坑爹,Mac下还有IE)

    起源代码可能也是很早期的时候了,再往后Mac下的IE5也发展到IE6了,各种浏览器开始向W3C这条标准慢慢靠齐了。所以就有了下面这个写法出现了。

    CSS

    .clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } * html .clearfix { zoom: 1; } /* IE6 */ *:first-child+html .clearfix { zoom: 1; } /* IE7 */

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .clearfix:after {
        visibility: hidden;
        display: block;
        font-size: 0;
        content: " ";
        clear: both;
        height: 0;
    }
    * html .clearfix { zoom: 1; } /* IE6 */
    *:first-child+html .clearfix { zoom: 1; } /* IE7 */

    IE6 和 IE7 都不支持 :after 这个伪类,因此需要后面两条来触发IE6/7的haslayout,以清除浮动。幸运的是IE8支持 :after 伪类。因此只需要针对IE6/7的hack了。

    在一个有float 属性元素的外层增加一个拥有clearfix属性的div包裹,可以保证外部div的height,即清除”浮动元素脱离了文档流,包围图片和文本的 div 不占据空间”的问题。

    Jeff Starr 在这里针对IE6/7用了两条语句来触发haslayout。我在想作者为什么不直接用 * 来直接对 IE6/7 同时应用 zoom:1 或者直接就写成:

    CSS

    .clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } .clearfix{*zoom:1;}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    .clearfix:after {
        visibility: hidden;
        display: block;
        font-size: 0;
        content: " ";
        clear: both;
        height: 0;
    }
    .clearfix{*zoom:1;}

    但是对于很多同学这种优化程度代码还是不够给力,clearfix 发展到现在的两个终极版。

    meta列表

    好的meta使用,能更好地提高页面的可用性及被检索的几率。

    这里并不会列出所有的meta使用方式,只挑选一些常用及实际意义比较大的讲讲,当然也包括一些厂商私有定制的。

     

    关于作者:risker

    图片 9

    2014年大学毕业,现在在北京某互联网公司从事前端开发的工作,近半年主要做移动web开发。微博粉丝太少,求粉。 个人主页 · 我的文章 · 7 ·   

    图片 10

    重构clearfix浮动

    构成Block Formatting Context的方法有下面几种:

    float的值不为none。

    overflow的值不为visible。

    display的值为table-cell, table-caption, inline-block中的任何一个。

    position的值不为relative和static。

    很明显,float和position不合适我们的需求。那只能从overflow或者display中选取一个。

    因为是应用了.clearfix和.menu的菜单极有可能是多级的,所以overflow: hidden或overflow: auto也不满足需求

    (会把下拉的菜单隐藏掉或者出滚动条),那么只能从display下手。

    我们可以将.clearfix的display值设为table-cell, table-caption, inline-block中的任何一个

    但是display: inline-block会产生多余空白,所以也排除掉。

    剩下的只有table-cell, table-caption,为了保证兼容可以用display: table来使.clearfix形成一个Block Formatting Context

    因为display: table会产生一些匿名盒子,这些匿名盒子的其中一个(display值为table-cell)会形成Block Formatting Context。

    这样我们新的.clearfix就会闭合内部元素的浮动。

    后面又有人对此进行了改良:

    终极版一:

    CSS

    .clearfix:after { content:"200B"; display:block; height:0; clear:both; } .clearfix {*zoom:1;}/*IE/7/6*/

    1
    2
    3
    4
    5
    6
    7
    .clearfix:after {
        content:"200B";
        display:block;
        height:0;
        clear:both;
    }
    .clearfix {*zoom:1;}/*IE/7/6*/

    解释下:content:”200B”;这个参数,Unicode字符里有一个“零宽度空格”,即 U+200B,代替原来的“.”,可以缩减代码量。而且不再使用visibility:hidden。

    终极版二:

    CSS

    .clearfix:before,.clearfix:after{ content:""; display:table; } .clearfix:after{clear:both;} .clearfix{ *zoom:1;/*IE/7/6*/ }

    1
    2
    3
    4
    5
    6
    7
    8
    .clearfix:before,.clearfix:after{
        content:"";
        display:table;
    }
    .clearfix:after{clear:both;}
    .clearfix{
        *zoom:1;/*IE/7/6*/
    }

    这两个终极版代码都很简洁,终极版一和二都可以使用,以上代码都经过测试,大家赶紧用一下吧,如果有什么问题请及时跟我反馈,如果你还停留在clearfix的老代码的时候就赶紧更新一下代码吧。

    2 赞 7 收藏 评论

    图片 11

    常规

    声明文档使用的字符编码

    XHTML

    <meta charset="utf-8" />

    1
    <meta charset="utf-8" />

    该声明用来指定文档的编码,除了utf-8,可选值还有:ISO-8859-1、BIG5、iso-8859-2, iso-2022-jp, iso-2022-kr, gb2312等

    当然,你可能还见过使用另外一种方式来定义文档字符编码:

    XHTML

    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    1
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    相对于这种方式,更推荐你使用第1种,言外之意,就是推荐使用HTML5

    声明页面刷新或跳转

    XHTML

    <meta http-equiv="refresh" content="10" /> <meta http-equiv="refresh" content="10; url=" />

    1
    2
    <meta http-equiv="refresh" content="10" />
    <meta http-equiv="refresh" content="10; url=http://www.doyoe.com" />

    该声明用来指定页面自刷新或者跳转到其它页面,其中的时间单位是s

    声明页面过期时间

    XHTML

    <meta http-equiv="expires" content="0" /> <meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT" />

    1
    2
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT" />

    该声明用来指定页面的过期时间,一旦网页过期,从服务器上重新请求,其中时间必须使用GMT格式,或者直接是0(即不缓存)

    声明页面是否缓存

    XHTML

    <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" />

    1
    2
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />

    上述语句都可以用来指定文档不被缓存。一些仍然在使用HTTP/1.0的可以使用第1条,第2条由HTTP/1.1提供,常用值还有:public, no-cache, no-store等

    声明作者信息

    XHTML

    <meta name="author" content="joy, dooyoe@gmail.com" />

    1
    <meta name="author" content="joy, dooyoe@gmail.com" />

    本文由金沙国际官网发布于web前端,转载请注明出处:清除浮动进化史,深刻理解

    关键词: