css的世界很奇妙,写个小页面简单明了,写个大动画难如登天。要想深入了解需要不断的夯实基础,挖掘底层逻辑。
接下来呢,把我工作中用到的一些简单属性效果简单的展示出来,让大家能够学以致用。
currentColor
使用该关键字的元素,其色值是获取(自身或其最近父元素)color属性的颜色值。
// html
<div class="father">
<p class="baby">
我获取了父元素的color属性值,当鼠标移到父元素上改变父元素color值时,我的颜色也改变咯
</p>
</div>
// css
.father {
width: 100px;
height: 100px;
color: #f00;
cursor: pointer;
}
.father:hover {
color: #f0f;
}
.father > .baby {
color: currentColor;
}
object-fit
CSS3 background-size出现的比较早,大家应该知道其支持的一些值,除了数值之外,其还支持几个关键字,例如:cover, contain等。
object-fit也是类似的,但还是有些差异,具体有5个值:
.fill { object-fit: fill; }
.contain { object-fit: contain; }
.cover { object-fit: cover; }
.none { object-fit: none; }
.scale-down { object-fit: scale-down; }
每个属性值的具体含义如下:
- fill: 中文释义“填充”。默认值。替换内容拉伸填满整个content box, 不保证保持原有的比例。
- contain: 中文释义“包含”。保持原有尺寸比例。保证替换内容尺寸一定可以在容器里面放得下。因此,此参数可能会在容器内留下空白。
- cover: 中文释义“覆盖”。保持原有尺寸比例。保证替换内容尺寸一定大于容器尺寸,宽度和高度至少有一个和容器一致。因此,此参数可能会让替换内容(如图片)部分区域不可见。
- none: 中文释义“无”。保持原有尺寸比例。同时保持替换内容原始尺寸大小。
- scale-down: 中文释义“降低”。就好像依次设置了none或contain, 最终呈现的是尺寸比较小的那个。
quote
css中有一个名为quotes的属性,可以指定闭合符号。
我们通过几个示例来看看quotes的作用:
// html
<q class="zh">不忘初心</q><br />
<q class="en">stay true to the mission</q><br />
<q class="book">生活</q>
// css
.zh {
quotes: "“" "”";
}
.en {
quotes: '"' '"';
}
.book {
quotes: "《" "》";
}
count
css计数器的两个属性(counter-reset,counter-increment)和一个方法(counter()/counters())
1. counter-reset:顾名思义,就是计数器-重置的意思。
它的属性值如下:
- none:默认,不能对选择器的计数器进行重置。
- id number:id为定义重置计数器的选择器、id或class。number可设置次选择器出现次数的计数值。可以为正数、零或负数(各个浏览器支持不同)。
- inherit:规定应该从父元素继承counter-reset属性的值。 来看两个简单的counter-reset示例:
// html
<p>看!初始值为:</p>
<p class="default"></p>
// css
.default {
counter-reset: num 6;
}
.default:before {
content: counter(num);
}
counter-reset还可以接受多个参数哦~
// html
<p>看!初始值为:</p>
<p class="default"></p>
// css
.default {
counter-reset: num 8 num2 8;
}
.default:before {
content: counter(num);
}
.default:after {
content: counter(num2);
}
2. counter-increment:顾名思义,就是计数器-递增的意思。
它的属性值如下:
- none:没有计数器将递增。
- id number:id定义将增加计数的选择器、id或class。number定义增量。number可以是正数、零或者负数。
- inherit:指定counter-increment属性的值,应该从父元素继承。 来看两个简单的counter-increment示例:
// html
<p>看!初始值为:</p>
<p class="default"></p>
// css
.default {
counter-reset: num 0; // 如果没有默认值,则默认为0
counter-increment:num;// 默认递增一次(也可以设置在伪元素上)
}
.default:before {
content: counter(num);
}
counter-increment在父子级同时存在效果:
// html
<p>看!初始值为:</p>
<p class="default"></p>
// css
.default {
counter-increment: num;
}
.default:before {
content: counter(num);
counter-increment: num;
}
父级和子级各自自增一次,结果为2。总而言之,无论位置在何处,只要有counter-increment,对应的计数器的值就会变化,counter()函数只是负责输出罢了~!
counter-increment的属性值与counter-reset有与之呼应的设定,在写法上也是空格区分即可。
counter-increment:num num2;
3.方法counter()/counters()。这是方法而不是属性。
- counter():返回一个代表计数器的当前值的字符串。它通常和伪元素搭配使用,但是理论上可以在支持<strting>值的任何地方使用。
/* 简单使用 */
counter(计数器名称);
/* 更改计数器显示 */
counter(countername, upper-roman)
// html
<ol>
<li></li>
<li></li>
<li></li>
</ol>
// css
ol {
counter-reset: lc;
}
li {
counter-increment: lc;
}
li::after {
content: "[" counter(lc) "] == [" counter(lc, upper-roman) "]";
}
- counters():是一个嵌套计数器,返回表示指定计数器当前值的连接字符串。counters()函数有两种形式:counters(name,string)或counters(name,string,style)。它通常和伪元素搭配使用,但是理论上可以在支持<string>值的任何地方使用。生成的文本是具有给定名称的所有计数器的值,从最外层到最内层,之间由指定字符串分隔计数器以指示的样式呈现,如果未指定样式,则默认为十进制。
/* Simple usage - style defaults to decimal(默认为十进制) */
counters(countername, '-');
/* changing the counter display(改变计数器显示) */
counters(countername, '.', upper-roman)
// html
<ol>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
<li></li>
<li></li>
<li>
<ol>
<li></li>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
</ol>
</li>
</ol>
// css
ol {
counter-reset: listCounter;
}
li {
counter-increment: listCounter;
}
li::marker {
content: counters(listCounter, ".", upper-roman) ") ";
}
li::before {
content: counters(listCounter, ".") " == "
counters(listCounter, ".", lower-roman);
}
padding
关于padding的属性值,其实没有什么好说的。其一是padding属性不支持负值,其二是padding支持百分比,但是padding的百分比计算规则有不同点:padding百分比值无论水平还是垂直方向均是相对父元素的宽度计算的!!!
来实现一个自适应的等比例矩形效果:
// html
<div>
<p></p>
</div>
// css
div {
width: 100px;
}
p {
padding:50%;
}
以上百分比值应用在具有块状特性的元素上,如果是内联元素,会有不同的表现哦~
- 同样相对于宽度计算;
- 默认的高度和宽度细节差异;(当内联元素内容为空时,内联元素的垂直padding会让空白节点显现,就是规范中的'strut'。解决办法:内联元素默认高度受font-size属性影响,所以设置其值为0即可。)
- padding会断行。(当内联元素内容有文字时) 因为不怎么常用,这里就不再深入讲解啦。
margin
老生常谈的场景:让一个元素水平垂直居中。。。
- 绝对定位元素的margin:auto居中。展示效果如下:
// html
<div class="father">
<span class="son"></span>
</div>
// css
.father {
height: 200px;
position: relative;
text-align: center;
line-height: 100px;
}
.son {
width: 100px;
position: absolute;
height: 100px;
background: rgb(119, 113, 113);
margin: -50px;
top: 50%;
left: 50%;
}
以下这种方式子元素的尺寸表现为'格式化宽度和格式化高度',和<div>的'正常流宽度'一样,同属于外部尺寸,也就是尺寸自动填充父级元素的可用尺寸,个人认为比上面的margin需要计算要好使得多。
// html
<div class="father">
<span class="son2"></span>
</div>
// css
.father {
height: 200px;
position: relative;
text-align: center;
line-height: 100px;
}
.son2 {
width: 100px;
position: absolute;
height: 100px;
background: rgb(231, 181, 181);
margin: auto;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
border
其貌不扬的border其实在开发当中可以满足相当多的小需求,比如移动端的汉堡栏:
// html
<div class="hamb"></div>
// css
.hamb {
width: 100px;
height: 20px;
border-top: 60px double;
border-bottom: 20px solid;
}
又如绘制一个三角形:
// html
<div class="triangle"></div>
// css
.triangle {
width: 0;
border: 10px solid;
border-color: #ccc transparent transparent;// border-color属性接受四个颜色参数值,方向分别为上下左右
}
以及不使用border-radius实现“圆角”按钮:
// html
<div class="round_btn">圆圆的按钮</div>
// css
.round_btn {
display: inline-block;
line-height: 40px;
padding: 0 40px;
color: #fff;
background: rgb(46, 245, 235);
position: relative;
}
.round_btn::before,
.round_btn::after {
content: "";
position: absolute;
left: 0;
right: 0;
border-style: solid;
}
.round_btn::before {
top: -4px;
border-width: 0 4px 4px;
border-color: transparent transparent rgb(46, 245, 235);
}
.round_btn::after {
bottom: -4px;
border-width: 4px 4px 0;
border-color: rgb(46, 245, 235) transparent transparent;
}
看起来是不是圆圆的呢,不仔细看是不是看不出来是什么形状,其实它的四个角是梯形的哦~~