CSS2.1中的CSS属性的设计初衷是图文展示,所以并没有专门与布局相关的CSS属性。因此,在CSS2.1中出现了很多奇怪的现象,如float属性,设计之初是为了文字环绕效果,最后居然成了布局中常用的属性。
CSS3.0及以后版本中,新的特性都是根据当下具体的 Web 场景来设计的,如设备情况等。新特性主要有4个方面:
CSS2.1从2002开开始制定,到2011年成为规范,花费了10年。 CSS3.0及以后版本,为了加速CSS标准化,将 CSS 划分为更小的组件,称之为模块。模块之间互相独立,按照各自速度走镖标准化。
下面列举一些在开发中可以经常用到,且节省大量代码及提升效率的CSS新特性:
CSS2.1是基于方向设计的,而整个CSS3.0世界是围绕“流”来构建的。基于方向虽然符合现实认知,但与底层不符,可能会产生问题。
<div>
<button>确定</button>
<button>取消</button>
</div>
基于方向设置
button {
margin-right: 10px;
}
/*修改方向,会出现问题 */
div {
direction: rtl;
background: #333;
}
基于流:
button {
/*文档流的逻辑属性,表示内联元素文档流结束的方向*/
maring-inline-end: 10px;
}
当然,我们可以控制,只让第一个button后增加 margin 值,如:
button~bubutton {
margin-right: 10px;
}
这里,重点要说明的是,基于方向可能会有一些问题。基于流的逻辑属性,无需考虑方向问题。
基于流逻辑的相关属性,还有如下一些,大家可自行查阅:
属性 | 作用 |
---|---|
padding-inline | 控制元素在水平方向上的内边距,即左右内边距 |
padding-block | 控制元素在垂直方向上的内边距,即上下内边距 |
border-inline | 控制元素在水平方向上的边框样式,包括边框线型、宽度和颜色等 |
border-block | 控制元素在垂直方向上的边框样式,包括边框线型、宽度和颜色等 |
宽度、高度将随文字宽度而进行自适应。
<div class="box">
<div class="content">纸上得来终觉浅,绝知此事要躬行。</div>
</div>
使用传统方式:
.box {
width: 100px;
height: 100px;
border: 1px solid red;
text-align: center;
}
.content {
display: inline-block;
text-align: left;
}
使用 width:fit-content
方式:
.box {
width: 100px;
height: 100px;
border: 1px solid red;
}
.content {
width: fit-content;
margin: auto;
}
好处: ① 保护了元素原始的 display 值;② 让元素的尺寸有了确定值。
CJK 文本不断行 (CJK 指中文/日文/韩文 )
<div>
<p>张三 李四 奥斯托洛夫斯基</p>
<p class="keep-all">张三 李四 奥斯托洛夫斯基</p>
</div>
p {
width: 100px;
}
p.keep-all {
word-break: keep-all;
}
<wbr>
精确换行的控:如果宽度足够,不换行;如果宽度不足,则在<wbr>
元素所在位置进行换行。 <br>
直接换行,无论是否足够。
PS:<wbr>
也可以使用 ​
替换。
<p>abcdefghigklmnopqrstuvwxyz</p>
<p>abcdefg<wbr>higklmn<wbr>opqrst<wbr>uvwxyz</p>
p {
border: 1px solid;
width: 100px;
}
好处:更好的控制了换行位置!
改变 outline 属性设置的轮廓的偏移位置。会悬浮在元素边框之上,不占用盒模型的空间。
参考地址:https://demo.cssworld.cn/new/3/11-1.php
img:active {
outline: solid deepskyblue;
}
.outline-offset {
outline-offset: -3px;
}