<p>Cet article vous présente les quatre attributs du modèle de boîte CSS (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
<p>Selon que la « boîte extérieure » soit en ligne ou niveau de bloc Nous pouvons diviser les éléments en éléments en ligne et éléments de niveau bloc, et selon que
a un contenu remplaçable, nous pouvons également diviser les éléments en éléments remplacés et éléments non remplacés
<p> Les éléments qui peuvent être remplacés en modifiant le contenu présenté par une certaine valeur d'attribut sont appelés "éléments de remplacement". Les éléments de remplacement courants sont : <img alt="Introduction aux quatre propriétés du modèle de boîte CSS (avec code)" >,
<p>1. la page ; Tels que l'espacement intérieur, la couleur d'arrière-plan et d'autres styles de cases à cocher simples
<p>2. Avoir leurs propres tailles telles que
<p>
1.3 Règles de calcul de la taille des éléments remplacés
<p>Les tailles des éléments remplacés sont divisées en 3 catégories de l'intérieur vers l'extérieur : taille intrinsèque, taille HTML et taille CSS
- <p>Taille intrinsèque fait référence à la taille d'origine du contenu de remplacement ; par exemple, lorsque les images, les vidéos et les entrées existent en tant que fichiers indépendants, elles ont toutes leur propre largeur et hauteur
- <p>Taille HTML, la "taille HTML" ne peut être modifiée que via les attributs natifs. Ces
HTML
attributs natifs incluent les attributs HTML
et <img alt="Introduction aux quatre propriétés du modèle de boîte CSS (avec code)" >
de width
, L'attribut height
de <input>
, l'attribut size
de <textarea></textarea>
et l'attribut cols
rows
- <p>Taille CSS font spécifiquement référence au et
width
qui peut être transmis via CSS Ou la taille définie par height
et max-width/min-width
correspond à max-height/min-height
content box
<p>
<p> dans la case taille Priorité de calcul de la taille : Taille CSS > Taille HTML > Taille intrinsèque
2. Attribut de contenu
Notez que le <p> L'attribut peut non seulement être utilisé dans ::before/::After, il peut également être utilisé dans des éléments, mais il a une certaine compatibilité.
content
Sous le navigateur Chrome, tous les éléments supportent l'attribut content, tandis que les autres navigateurs ne supportent que le pseudo-élément ::before/::after <p>Cas 1 : Basé sur des pseudo-éléments Contenu de l'image technologie de génération d'éléments <p>HTML : <p>
<img alt="美女沉思图" data-src="1.jpg">
<p><button>设置src属性显示图片</button></p>
Copier après la connexion
var eleButton = document.querySelector('button'),
eleImg = document.querySelector('img');if (eleButton && eleImg) {
var initValueButton = eleButton.innerHTML; // 图片地址
var srcImage = eleImg.getAttribute('data-src'); // 移除该属性
eleImg.removeAttribute('data-src'); // 按钮点击事件
eleButton.addEventListener('click', function() {
if (this.innerHTML == initValueButton) {
this.innerHTML = '移除src属性'; // 图片显示
eleImg.setAttribute('src', srcImage); } else {
this.innerHTML = initValueButton; // src属性移除
eleImg.removeAttribute('src'); }
});}
Copier après la connexion
CSS : <p>
img {
display: inline-block; width: 256px; height: 192px; /* 隐藏Firefox alt文字 */
color: transparent; position: relative; overflow: hidden;}img:not([src]) {
/* 隐藏Chrome alt文字以及银色边框 */
visibility: hidden;}img::before {
/* 淡蓝色占位背景 */
content: ""; position: absolute; left: 0; width: 100%; height: 100%; background-color: #f0f3f9; visibility: visible;}img::after {
/* 黑色alt信息条 */
content: attr(alt); position: absolute; left: 0; bottom: 0; width: 100%; line-height: 30px; background-color: rgba(0,0,0,.5); color: white; font-size: 14px; transform: translateY(100%); /* 来点过渡动画效果 */
transition: transform .2s; visibility: visible;}img:hover::after {
transform: translateY(0);}
Copier après la connexion
<p>
<p>Principe
: Lorsque l'image n'a pas de src, et
::before
peuvent prendre effet lors de l'ajout d'une adresse
::after
à l'image, l'image passe d'un élément normal à un élément de remplacement, et les éléments d'origine restent les mêmes.
src
et
::before
pris en charge sont tous invalides pour le moment
::after
Cas 2 : le contenu introduit des images <p>
img { content: url(1.jpg); }
Copier après la connexion
Cas 3 : survolez. implémente le remplacement d'image <p>
<img src="laugh.png" alt="Introduction aux quatre propriétés du modèle de boîte CSS (avec code)" >
img:hover {
content: url(laugh-tear.png);
}
Copier après la connexion
Cas 4 : Implémentation élégante du h1 SEO<p>
<h1>《CSS 世界》</h1>
h1 {
width: 180px;
height: 36px;
background: url(logo.png); /* 隐藏文字 */
text-indent: -999px;
}
Copier après la connexion
Cas 5 : Chargement de l'animation<p>
正在加载中<dot>...</dot>
dot {
display: inline-block;
height: 1em;
line-height: 1;
text-align: left;
vertical-align: -.25em;
overflow: hidden;
}
dot::before {
display: block;
content: '...\A..\A.';
white-space: pre-wrap;
animation: dot 3s infinite step-start both;
}
@keyframes dot {
33% { transform: translateY(-2em); }
66% { transform: translateY(-1em); }
}
Copier après la connexion
Cas 6 : Compteur (compréhension) <p>
<div class="reset">
<div class="counter">我是王小二 <div class="reset">
<div class="counter">我是王小二的大儿子</div>
<div class="counter">我是王小二的二儿子 <div class="reset">
<div class="counter">我是王小二的二儿子的大孙子</div>
<div class="counter">我是王小二的二儿子的二孙子</div>
<div class="counter">我是王小二的二儿子的小孙子</div>
</div>
</div>
<div class="counter">我是王小二的三儿子</div>
</div>
</div>
<div class="counter">我是王小三</div>
<div class="counter">我是王小四 <div class="reset">
<div class="counter">我是王小四的大儿子</div>
</div>
</div></div>
Copier après la connexion
CSS:
.reset {
padding-left: 20px;
counter-reset: wangxiaoer;}.counter:before {
content: counters(wangxiaoer, '-') '. ';
counter-increment: wangxiaoer;}
Copier après la connexion
3. Attribut de remplissage
- <p>le remplissage affecte à la fois les directions horizontales et verticales des éléments en ligne
- <p>Les pourcentages de largeur et de hauteur de remplissage sont calculés en fonction de la largeur de l'élément parent
De très nombreux collègues front-end ont un tel mauvaise compréhension : le remplissage des éléments en ligne n'affecte que la direction horizontale et n'affectera pas la direction verticale. Cette perception est inexacte, éléments en ligne
Le remplissage affectera également la disposition et les performances visuelles dans la direction verticale. Tout simplement parce que les éléments en ligne n'ont ni largeur ni hauteur visuelles (clientHeight et
clientWidth est toujours 0), le comportement vertical est complètement affecté par la hauteur de ligne et l'alignement vertical
L'impact est que la distance entre le contenu de la ligne précédente et la ligne suivante n'est pas modifiée visuellement. Cela nous donne donc l'impression que le remplissage vertical n'a aucun effet. <p>Cas 1 : Augmenter la zone de clic<p>
a { padding: .25em 0; }
Copier après la connexion
Cas 2 : Séparateur de n'importe quelle hauteur<p>
<a href="">登录</a><a href="">注册</a>
a + a:before {
content: "";
font-size: 0;
padding: 10px 3px 1px;
margin-left: 6px;
border-left: 1px solid gray;
}
Copier après la connexion
Cas 3 : Boîte à proportion égale<p> Utilisé pour implémenter une mise en page adaptative, telle que des bannières de pages Web et des images proportionnelles<p>
/* 矩形 */
div { padding: 50%; }
/* 正方形 */
div { padding: 25% 50%; }
Copier après la connexion
Cas 4 : Dessin graphique<p>
/* 菜单 */
.icon-menu {
display: inline-block;
width: 140px; height: 10px;
padding: 35px 0;
/* 默认border-color:currentColor; */
border-top: 10px solid;
border-bottom: 10px solid;
/* 核心 */
background-color: currentColor;
background-clip: content-box;
}
Copier après la connexion
4 Attribut de marge
Caractéristiques de la marge : <p>
- Contrairement au padding, la marge peut être négative <p>
- Comme le padding, le pourcentage de marge est également relatif à la largeur de son élément parent ; <p>
4.1 Application de la marge négative
(1) Augmenter la taille de la boîte <p><p>Seuls les éléments sont dans la "pleine utilisation de l'espace disponible" " status Uniquement lorsque la marge peut changer la taille visuelle de l'élément
/* 无法改变尺寸 */
.father {
width: 300px;
margin: 0 -20px;
}
/* .son 尺寸变化 */
<div class="father">
<div class="son"></div>
</div>
.father { width: 300px; }
.son { margin: 0 -20px; }
Copier après la connexion
(2) Mise en page classique non compatible à deux colonnes <p>
.column-box {
overflow: hidden;
}
.column-left,
.column-right {
margin-bottom: -9999px;
padding-bottom: 9999px;
}
Copier après la connexion
Principe de mise en page : <p> Par défaut, la distance supérieure et inférieure des éléments au niveau du bloc dans la direction verticale est de 0. Une fois margin-bottom:-9999px signifie que tous les éléments suivants et l'élément supérieur
La distance spatiale de l'élément devient -9999px, ce qui signifie que tous les éléments suivants se sont déplacés vers le haut de 9999px. À ce stade, faites un coup de Dieu padding-bottom:9999px
Augmenter la hauteur de l'élément, qui est plus ou moins, n'a aucun effet sur le calque de mise en page, mais cela apporte ce dont nous avons besoin : le calque visuel a une hauteur supplémentaire de 9999 px disponible pour la couleur d'arrière-plan. <p>4.2 Fusion de marges
<p>La marge supérieure (marge-haut) et la marge inférieure (marge-bas) des éléments au niveau du bloc sont parfois fusionnées en une seule marge. appelé « fusion de marge »
. Deux conditions : éléments au niveau du bloc et 3 scénarios de fusion de marge qui ne se produisent que dans le sens vertical
<p>
(1) Fusion de marge d'éléments frères adjacents . Il s'agit de la fusion de marge la plus courante et la plus basique <p>
<p>第一行</p>
<p>第二行</p>
p { margin: 1em 0; }
Copier après la connexion
(2) Élément parent et premier/dernier enfant <p>
<div class="father">
<div class="son" style="margin-top:80px;"></div>
</div>
<div class="father" style="margin-top:80px;">
<div class="son"></div>
</div>
<!-- 这种情形也只表现为上边距80px,margin发生了合并 -->
<div class="father" style="margin-top:80px;">
<div class="son" style="margin-top:80px;"></div>
</div>
Copier après la connexion
(3) Fusion de marge d'élément vide au niveau du bloc<p>
.father { overflow: hidden; }
.son { margin: 1em 0; }
<div class="father">
<div class="son"></div>
</div>
Copier après la connexion
<p>此时.father 所在的这个父级
<p>
元素高度仅仅是 1em,因为.son 这个空<p>元 素的 margin-top 和 margin-bottom 合并在一起了<p>
如何阻止margin发生合并?<p>对于 margin-top 合并,可以进行如下操作(满足一个条件即可):
- <p>父元素设置为块状格式化上下文元素;
- <p>父元素设置 border-top 值;
- <p>父元素设置 padding-top 值;
- <p>父元素和第一个子元素之间添加内联元素进行分隔。
<p>对于 margin-bottom 合并,可以进行如下操作(满足一个条件即可):
- <p>父元素设置为块状格式化上下文元素;
- <p>父元素设置 border-bottom 值;
- <p>父元素设置 padding-bottom 值;
- <p>父元素和最后一个子元素之间添加内联元素进行分隔;
- <p>父元素设置 height、min-height 或 max-height。
<p>
margin 合并的计算规则:<p>“正正取大值”“正负值相加”“负负最负值”
4.3 margin:auto深入
<p>margin:auto 的填充规则如下
(1)如果一侧定值,一侧 auto,则 auto 为剩余空间大小。
(2)如果两侧均是 auto,则平分剩余空间。<p>一侧auto应用
<div class="father">
<div class="son"></div>
</div>
.father {
width: 300px;
}
.son {
width: 200px;
margin-right: 80px;
margin-left: auto;
}
Copier après la connexion
<p>两侧auto,水平垂直居中
.father {
width: 300px; height: 150px;
background-color: #f0f3f9;
position:relative;
}
.son {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
width: 200px; height: 100px;
background-color: #cd0000;
margin: auto;
}
Copier après la connexion
<p>注意:<p>display 计算值 inline 的非替换元素的垂直 margin 是无效的。对于内联替换元素, 垂直 margin 有效,并且没有 margin 合并的问题,所以图片永远不会发生 margin 合并。
五、border属性
<p>几个特点:
- <p>border属性值不支持百分比
- <p>border-style 默认值为none
- <p>border-color 默认值为currentColor
<p>应用1:图片上传hover变色
.add {
color: #ccc;
border: 2px dashed;
}
.add:before {
border-top: 10px solid;
}
.add:after {
border-left: 10px solid;
}
/* hover变色 */
.add:hover {
color: #06C;
}
Copier après la connexion
<p>应用2:优雅增加点击区域
/* box-sizing非border-box时 */
.icon-clear {
width: 16px;
height: 16px;
border: 11px solid transparent;
}
Copier après la connexion
<p>应用3:三角形绘制
div {
width: 0;
border: 10px solid;
border-color: #f30 transparent transparent;
}
Copier après la connexion
<p>border能构成三角形和梯形的原理如下:<p>
<p>通过改变width/height以及border-width在不同方位的尺寸,可以改变三角形的倾角方位和尺寸<p>应用4:border等高布局
.box {
border-left: 150px solid #333;
background-color: #f0f3f9;
}
.box > nav {
width: 150px;
margin-left: -150px;
float: left;
}
.box > section {
overflow: hidden;
}
Copier après la connexion
<p>border等高布局的局限性:
- <p>由于 border 不支持百分比宽度,因此,适合至少一栏是定宽的布局
- <p>等高布局的栏目有限制。基本上,border 等 高布局只能满足 2~3 栏的情况,除非正好是等比例的,那还可以使用 border-style:double 实现最多 7 栏布局
<p>相关文章推荐:
<p>
CSS中流体布局、元素以及尺寸的介绍
<p>
css box-sizing属性(盒子模型)的用法介绍
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!