Maison interface Web tutoriel HTML CSS-浮动篇float_html/css_WEB-ITnose

CSS-浮动篇float_html/css_WEB-ITnose

Jun 24, 2016 am 11:50 AM

Float是一个强大的属性,但是它也会困扰我们如果我们不知道它的工作原理的话.这篇文章主要介绍float的原理和基本用法.

我们可以看到float在印刷世界的应用-杂志.很多杂志文章都是左边一个图片,右边的文本浮动环绕着左边的图片.在HTML/CSS的世界中,有浮动样式的图片,文字将会包裹在它的周围,就像杂志的布局一样.图片只是浮动属性众多应用中的一个,我们也可以通过浮动来实现两栏(多栏)布局.实际上,我们可以在任意的HTML元素上使用浮动(块元素).

浮动的定义

来自W3C的定义:

A float is a box that is shifted to the left or right on the current line. The most interesting characteristic of a float (or “floated” or “floating” box) is that content may flow along its side (or be prohibited from doing so by the “clear” property). Content flows down the right side of a left-floated box and down the left side of a right-floated box.

简单来说就是设置了浮动的元素会浮动到相应的左边或者右边,内容会跟着填充到浮动元素的对应地方.

浮动有四个属性值:left|right|inherit|none,分别是左浮动,右浮动,继承(来自父元素的浮动属性值)和无.

来一个杂志效果的例子:

杂志效果浮动

图片的样式为:

img {     float: right;    margin: 10px;}
Copier après la connexion

浮动的表现

HTML有一个规则:正常文档流.在正常文档流下,每个块元素(div,p,h1...)都会换行.而浮动的元素在正常文档流下是最先布局的,然后脱离正常的文档流显示在它父元素的左边或者右边.所以浮动元素不再换行而是显示在元素的旁边.

看一个例子:没有设置浮动的三个块

块元素的样式:

.block {     width: 200px;    height: 200px;}
Copier après la connexion

这三个块是在正常文档流下的显示,每个元素在上个元素的正下方,现在我们把三个块都设置左浮动:

.block {     float: left;    width: 200px;    height: 200px;}
Copier après la connexion

效果看这里:左浮动

浮动之后每个块元素都跟在浮动元素的后面.如果父元素没有足够的宽度,那么浮动的元素将会自动换行显示.看这个例子,然后试着缩小浏览器窗口,浮动的块元素会自动换行.

清除浮动

浮动元素脱离了正常的文档流,所以会对在浮动之后的文档结构产生影响,因此我们在浮动元素过后,也要相应的清除浮动,让文档结构恢复到正常的文档流.清除浮动的方法有很多中,首先 最基本的就是对应的clear属性.

clear的属性值:left|right|both|inherit|none,相应的浮动对应相应的清除浮动.下面我们来看一个浮动的例子,一共四个块元素,前面两个浮动,后面两个不浮动,结构如下:

<div class="block pink float"></div><div class="block blue float"></div><div class="block green"></div><div class="block orange"></div>
Copier après la connexion

.block {    width: 200px;    height: 200px;}.float { float: left; }.pink { background: #ee3e64; }.blue { background: #44accf; }.green { background: #b7d84b; }.orange { background: #E2A741; }
Copier après la connexion

结果看这里

咦,绿色的块去哪里了呢?然后看看源代码,选中绿色块的HTML,原来在粉红色块的正下方.两个浮动元素的显示正如我们期望的那样,左浮动并在一排显示,但是它们已经脱离了正常的文档流,好像它们并不在那里一样.所以第一个没有浮动的元素就占领了它们的位置,被浮动元素遮盖住.所以我们需要清除浮动,让绿色的块显示.

代码结构如下:

<div class="block pink float"></div><div class="block blue float"></div><div class="block green clear"></div><div class="block orange"></div>
Copier après la connexion

.block {    width: 200px;    height: 200px;}.float { float: left; }.clear { clear: left; }.pink { background: #ee3e64; }.blue { background: #44accf; }.green { background: #b7d84b; }.orange { background: #E2A741; }
Copier après la connexion

通过clear:left这个css样式,绿色的块显示了,正确的清除浮动能让元素在浮动的基础上也不影响正常的文档流.清除浮动后的效果

利用浮动属性进行布局

在用DIV布局的现在,DIV+float是我们大部分都喜欢用来实现分栏布局的一种方法.我们来看一个简单的两栏布局.

CSS如下:

#container {    width: 960px;    margin: 0 auto;}#content {    float: left;    width: 660px;    background: #fff;}#navigation {    float: right;    width: 300px;    background: #eee;}#footer {    clear: both;    background: #aaa;    padding: 10px;}
Copier après la connexion

通过设置#content左浮动,#navigation右浮动,总宽度为#container来实现了两栏布局.要注意的是,#footer一定要清除浮动,因为同时存在左浮动和右浮动,所以使用clear:both来清楚两边的浮动.

来看一下如果没有对#footer进行清除浮动的结果.戳这里

浮动优先

浮动元素在HTML中放置在不同的位置也会产生不用的显示结果.我们来看一个例子.戳这里

例子中图片向右浮动并且在HTML结构中在未浮动元素P之前.代码结构如下:

<div id="container">    <img  src="/static/imghw/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <p>This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.</p></div>
Copier après la connexion

#container {    width: 280px;    margin: 0 auto;    padding: 10px;    background: #aaa;    border: 1px solid #999;}img {    float: right;}
Copier après la connexion

现在我们改变HTML的结构,把浮动元素IMG放在P元素的后面.

<div id="container">    <p>This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.</p>    <img  src="/static/imghw/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" ></div>
Copier après la connexion

具体效果戳这里

图片这时已经没有包含在#container里,因为浮动优先原则里,之前的例子都是浮动元素在未浮动元素之前,所以得到的结果都是在我们的预期之内,而现在我们没有按照这个规则写我们的HTML结构,所以图片溢出在了包含它的父元素之外,这是由于collapsing.

当一个父元素包含了一些浮动元素,而这些浮动元素并没有向它应该的方式围绕在未浮动元素周围时collapsing就出现了.正如上面的例子中,浮动元素IMG就像并不在#container中一样.

一个最常见去修复这个问题的方式就是在我们的浮动元素后面添加一个有清除浮动属性的元素,跟我们之前清除浮动的方式很像,只是新增了一个额外的元素,代码看下面:

<div id="container">    <p>This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.</p>    <img  src="/static/imghw/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <div   style="max-width:90%"></div></div>
Copier après la connexion

但是新增了一行额外的代码并不是一个很好的方法,下面我们有几个其他的方法.

现在有一个HMTL,一个父元素有三个浮动的图片,代码结构如下:

<div id="container">    <img  src="/static/imghw/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <img  src="/static/imghw/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <img  src="/static/imghw/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" ></div>
Copier après la connexion

#container {    width: 260px;    margin: 0 auto;    padding: 10px 0 10px 10px;    background: #aaa;    border: 1px solid #999;}img {    float: left;    margin: 0 5px 0 0;}
Copier après la connexion

我们可以很快的意识到父元素并没有包含浮动的图片,因为浮动元素并不在文档流中,所以对于父元素来说它是空的,结果看这里

现在我们用CSS来修复这个问题而不是添加额外的HTML标记.有一个方法能让父元素自己清除它包含的浮动元素的浮动-overflow:hidden.要注意的是overflow属性并不是为清除浮动而设计的,它可以隐藏内容和滚动条.现在我们在#container上使用这个属性.

#container {    overflow: hidden;    width: 260px;    margin: 0 auto;    padding: 10px 0 10px 10px;    background: #aaa;    border: 1px solid #999;}
Copier après la connexion

显示结果戳这里

还有清除浮动的方法就是使用伪类选择器:

#container:after {    content: ".";    display: block;    height: 0;    clear: both;    visibility: hidden;}
Copier après la connexion

总结:

浮动可以让你的布局变得随意和响应式,同时清除浮动的方式也有很多种,选择你最习惯和喜欢的方式,让布局变得更加优美.

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Difficulté à mettre à jour la mise en cache des pages Web officielles du compte: comment éviter l'ancien cache affectant l'expérience utilisateur après la mise à jour de la version? Difficulté à mettre à jour la mise en cache des pages Web officielles du compte: comment éviter l'ancien cache affectant l'expérience utilisateur après la mise à jour de la version? Mar 04, 2025 pm 12:32 PM

Le cache de mise à jour de la page Web du compte officiel, cette chose est simple et simple, et elle est suffisamment compliquée pour en boire un pot. Vous avez travaillé dur pour mettre à jour l'article officiel du compte, mais l'utilisateur a toujours ouvert l'ancienne version. Dans cet article, jetons un coup d'œil aux rebondissements derrière cela et comment résoudre ce problème gracieusement. Après l'avoir lu, vous pouvez facilement faire face à divers problèmes de mise en cache, permettant à vos utilisateurs de toujours ressentir le contenu le plus frais. Parlons d'abord des bases. Pour le dire franchement, afin d'améliorer la vitesse d'accès, le navigateur ou le serveur stocke des ressources statiques (telles que des images, CSS, JS) ou du contenu de la page. La prochaine fois que vous y accédez, vous pouvez le récupérer directement à partir du cache sans avoir à le télécharger à nouveau, et il est naturellement rapide. Mais cette chose est aussi une épée à double tranchant. La nouvelle version est en ligne,

Comment ajouter efficacement les effets de course aux images PNG sur les pages Web? Comment ajouter efficacement les effets de course aux images PNG sur les pages Web? Mar 04, 2025 pm 02:39 PM

Cet article démontre un ajout de bordure PNG efficace aux pages Web à l'aide de CSS. Il soutient que CSS offre des performances supérieures par rapport à JavaScript ou à des bibliothèques, détaillant comment ajuster la largeur, le style et la couleur des bordures pour un effet subtil ou proéminent

Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur? Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur? Mar 17, 2025 pm 12:27 PM

L'article discute de l'utilisation des attributs de validation de formulaire HTML5 comme les limites requises, motifs, min, max et longueurs pour valider la saisie de l'utilisateur directement dans le navigateur.

Quel est le but du & lt; datalist & gt; élément? Quel est le but du & lt; datalist & gt; élément? Mar 21, 2025 pm 12:33 PM

L'article traite du HTML & lt; Datalist & GT; élément, qui améliore les formulaires en fournissant des suggestions de saisie semi-automatique, en améliorant l'expérience utilisateur et en réduisant les erreurs. COMMANDE COMPRES: 159

Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5? Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5? Mar 17, 2025 pm 12:20 PM

L'article examine les meilleures pratiques pour assurer la compatibilité des navigateurs de HTML5, en se concentrant sur la détection des fonctionnalités, l'amélioration progressive et les méthodes de test.

Quel est le but du & lt; Progress & gt; élément? Quel est le but du & lt; Progress & gt; élément? Mar 21, 2025 pm 12:34 PM

L'article traite du HTML & lt; Progress & GT; élément, son but, son style et ses différences par rapport au & lt; mètre & gt; élément. L'objectif principal est de l'utiliser & lt; Progress & gt; pour l'achèvement des tâches et & lt; mètre & gt; pour stati

Quel est le but du & lt; mètre & gt; élément? Quel est le but du & lt; mètre & gt; élément? Mar 21, 2025 pm 12:35 PM

L'article traite du HTML & lt; mètre & gt; élément, utilisé pour afficher des valeurs scalaires ou fractionnaires dans une plage, et ses applications courantes dans le développement Web. Il différencie & lt; mètre & gt; De & lt; Progress & gt; et ex

Comment utiliser le html5 & lt; time & gt; élément pour représenter les dates et les temps sémantiquement? Comment utiliser le html5 & lt; time & gt; élément pour représenter les dates et les temps sémantiquement? Mar 12, 2025 pm 04:05 PM

Cet article explique le html5 & lt; time & gt; élément de représentation sémantique de date / heure. Il souligne l'importance de l'attribut DateTime pour la lisibilité à la machine (format ISO 8601) à côté du texte lisible par l'homme, stimulant AccessIbilit

See all articles