当前位置: 首页 > 面试题库 >

我可以使用哪些“ clearfix”方法?

范麒
2023-03-14
问题内容

我有一个div包装两栏式布局的古老问题。我的侧边栏div处于浮动状态,因此我的容器无法包装内容和侧边栏。

<div id="container">
  <div id="content"></div>
  <div id="sidebar"></div>
</div>

似乎有许多方法可以解决Firefox中的明显错误:

  • <br clear="all"/>
  • overflow:auto
  • overflow:hidden

在我的情况下,似乎唯一可以正常工作的<br clear="all"/>解决方案是解决方案,这有点麻烦。overflow:auto给我带来讨厌的滚动条,并且overflow:hidden肯定有副作用。另外,由于它的不正确行为,IE7显然不应该遭受此问题的困扰,但就我而言,它与Firefox一样遭受痛苦。

我们目前可以使用哪种方法最可靠?


问题答案:

根据生产的设计,以下每个clearfix CSS解决方案都有其自己的优点。

该clearfix确实具有有用的应用程序,但也已被用作hack。在使用clearfix之前,也许这些现代的CSS解决方案可能会有用:

  • CSS Flexbox
  • CSS网格

容器用 overflow: auto;

清除浮动元素的最简单方法是使用overflow: auto包含元素上的样式。该解决方案适用于所有现代浏览器。

<div style="overflow: auto;">
  <img
    style="float: right;"
    src="path/to/floated-element.png"
    width="500"
    height="500"
  > 
  <p>Your content here…</p>
</div>

缺点是,在外部元素上使用margin和padding的某些组合会导致出现滚动条,但这可以通过将margin和padding放在另一个包含父元素的元素上来解决。

使用’overflow:hidden’也是一个clearfix解决方案,但是不会有滚动条,但是使用usinghidden会裁剪位于包含元素之外的所有内容。

注意: floated元素img在此示例中是一个标记,但可以是任何html元素。

已清除Clearfix

Thierry Koblentz在CSSMojo上写道:重新加载了最新的clearfix。他指出,通过放弃对oldIE的支持,该解决方案可以简化为一个CSS语句。另外,使用display:block(而不是display: table)可以使带有clearfix的元素成为同级元素时,页边距可以正确折叠。

.container::after {
  content: "";
  display: block;
  clear: both;
}

这是最新的clearfix版本。

较旧的Clearfix解决方案

以下解决方案对于现代浏览器不是必需的,但对于定位较旧的浏览器可能很有用。

请注意,这些解决方案依赖于浏览器错误,因此,仅在上述解决方案都不适合您时才应使用。

它们按时间顺序大致列出。

“ Beat That ClearFix”,适用于现代浏览器的clearfix

CSS Mojo的 ThierryKoblentz 指出,当定位现代浏览器时,我们现在可以删除zoom::before属性/值,而只需使用:

.container::after {
    content: "";
    display: table;
    clear: both;
}

该解决方案不支持IE 6/7……故意!

Thierry还提供:“ 提醒您:如果您从头开始一个新项目,请继续,但不要将这种技术与您现有的技术互换,因为即使您不支持oldIE,您现有的规则也会阻止您利润下降。”

微型Clearfix

Nicolas Gallagher的MicroClearfix是最新和全球采用的clearfix解决方案。

已知支持:Firefox 3.5 +,Safari 4 +,Chrome,Opera 9 +,IE 6+

.container::before, .container::after {
  content: "";
  display: table;
}
.container::after {
  clear: both;
}
.container {
  zoom: 1;
}

溢流特性

对于通常的情况,当定位的内容不会在容器的边界之外显示时,这种基本方法是首选的。

- 介绍如何解决与此相关的技术,即常见的问题,设置width: 100%在容器上。

.container {
  overflow: hidden;
  display: inline-block;
  display: block;
}

display可以使用其他属性来触发元素的“hasLayout”,而不必使用该属性为IE设置“hasLayout” 。

.container {
  overflow: hidden;
  zoom: 1;
  display: block;
}

使用该overflow属性清除浮点数的另一种方法是使用下划线hack。IE将应用带下划线前缀的值,其他浏览器则不会。该zoom属性触发IE中的hasLayout:

.container {
  overflow: hidden;
  _overflow: visible; /* for IE */
  _zoom: 1; /* for IE */
}

虽然可行,但使用骇客并不理想。

PIE:轻松清除方法

这种较旧的“轻松清除”方法的优点是,允许定位的元素悬挂在容器的边界之外,但代价是更麻烦的CSS。

这个解决方案已经很老了,但是您可以了解有关“位置即一切”的轻松清算的全部信息:

元素使用“清除”属性

快速而肮脏的解决方案(有一些缺点),可帮助您快速将某些东西拍打在一起:

<br style="clear: both" /> <!-- So dirty! -->

缺点

  • 如果布局样式基于媒体查询而更改,则它没有响应,因此可能无法提供所需的效果。纯CSS解决方案更为理想。
  • 它添加html标记,而不必添加任何语义值。
  • 它需要为每个实例提供内联定义和解决方案,而不是对CSS中“clearfix”的单个解决方案的类引用以及html中对其的类引用。
  • 它使其他人难以使用代码,因为其他人可能不得不编写更多hack来解决该问题。
  • 将来,当您需要/想要使用另一种clearfix解决方案时,您将不必返回并删除<br style="clear: both" />标记周围乱丢的每个标签。


 类似资料:
  • 本文向大家介绍vim 我可以使用哪些选项?,包括了vim 我可以使用哪些选项?的使用技巧和注意事项,需要的朋友参考一下 示例 如果您不知道应该使用哪些选项,则可能对该:options命令感兴趣。 这将打开一个列出所有Vim选项并显示其当前值的拆分。有26个部分显示您可以尝试的所有选项。 例如 在值行(例如set nowrap)上,您可以按CR切换值(如果它是二进制值)。在选项行(例如wrap lo

  • 问题内容: 我是JAX-RS的新手,我试图了解注释的工作方式。 在javadoc中有六个等级的列表()。但是,我在网络上找到将this注释与其他类型一起使用的代码,例如: 是否有可以与此注释一起使用的受支持类型的列表?在执行标准之间,此列表是否会更改? 我目前正在试验Jersey,我担心自己写的代码无法移植到其他JAX-RS实现中。 问题答案: 铆接的JAX-RS 规范定义了你可以通过注入的所有标

  • 我是 JAX-RS 的新手,我正在尝试了解注释应该如何工作。 在javadoc中有一个包含六个类的列表(< code >应用程序、< code>UriInfo、< code >请求、< code>HttpHeaders、< code >安全上下文、< code >提供者)。但是,我在网上找到了将this批注用于其他类型的代码,例如: 是否有可用于此批注的支持类型列表?该列表在标准实施期间是否发生变

  • 谷歌(遗憾地)计划破坏存储权限,使应用程序无法使用标准文件API(和文件路径)访问文件系统。许多人反对它,因为它改变了应用程序访问存储的方式,在很多方面,它是一个受限的API。 因此,如果我们希望处理各种存储卷并访问其中的所有文件,我们将需要在未来的Android版本上完全使用SAF(存储访问框架)(在Android Q上,我们至少可以暂时使用一个标志来使用正常的存储权限)。 例如,假设您想创建一

  • 问题内容: 我想我了解什么是指针,但我不太了解何时使用它。 下面的摘录来自“ A Tour of Go”。 “ * Vertex”和“&Vertex”的目的是什么? 我用“顶点”替换了它们,并且运行良好。 问题答案: 这不是指针/值区分的特别好例子,因为在这种情况下它们是可互换的!当您需要(从另一个函数)“远程”更改数据时,指针很有用。 正如您将注意到的那样,这不会改变任何东西(严格来说,它会更改

  • 问题内容: 从理论上讲,Dalvik执行任何虚拟机字节代码,例如使用以下程序的编译器创建的 AspectJ ColdFusion Clojure Groovy JavaFX Script JRuby Jython Rhino Scala Dalvik的字节码编译器是否已有工作版本,可用于Java以外的其他语言? 问题答案: 在发布时,它是用于构建可分发的第三方Android软件的唯一官方支持的编程