本文是笔者在学习CSS时的一些小白总结css
咱们知道的盒子模型主要由4个区域组成,分别是内容区域(content),内边距区域(padding),边框区域(border)和外边距区域(margin)。 对于不了解盒子模型的朋友能够移步到这里了解一下。html
替换元素(replaced element),顾名思义就是内容能够被替换的元素。react
咱们一般会把一些特殊意义的文本替换成图片,好比一个网站的logo。并发
::before
和
::after
两个伪元素,把这些与逻辑不相关的写在css里,react dom则专一于数据的表现。
<div className="price-panel">
<span className="price-panel__price">
¥
{(totalPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount-price">
已省¥
{(totalDiscountPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount">
(
{(discount / 10).toFixed(1)}
折)
</span>
</div>
复制代码
使用了伪元素后的react代码显然更加清晰表示数据。 HTML:dom
<div className="price-panel">
<span className="price-panel__price">
{(totalPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount-price">
{(totalDiscountPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount">
{(discount / 10).toFixed(1)}
</span>
</div>
复制代码
SCSS:学习
.price-panel {
&__price {
&::before {
content: '¥';
}
}
&__discount-price {
&::before {
content: '已省¥';
}
}
&__discount {
&::before {
content: '(';
}
&::after {
content: '折)';
}
}
}
复制代码
咱们还能使用伪元素帮助实现一些原本须要多个div实现的样式,好比下面这个对话框。网站
HTML:spa
<div class="dialog">Hi,I’m a bubble dialog. Can you see me?</div>
复制代码
CSS:3d
.dialog {
background: #f0f;
padding: 10px;
border-radius: 10px;
color: white;
max-width: 250px;
position: relative;
overflow: visible;
}
.dialog::after {
position: absolute;
content: '';
display: inline-block;
border-width: 5px 10px;
border-style: solid;
border-color: transparent transparent #f0f #f0f;
width: 0;
height: 0;
right: -20px;
}
复制代码
padding的百分比值是很是有用的。须要注意的padding的百分比值,不管是水平方向仍是垂直方向都是相对于宽度进行计算的不管是水平方向仍是垂直方向都是相对于包含块(即父元素)宽度进行计算的。(谢谢@熊谢谢 指点)code
若是须要弄一张16:9的等比缩放图片,能够利用padding的这个特性,设置一个padding-top
或者padding-bottom
为56.25%便可(100\16*9)
块级元素的margin-top
和margin-bottom
有时候会合并为单个margin,这种现象叫margin合并。 margin合并发生两个重要元素
margin合并的场景
在实际开发中,父子margin合并颇有可能会带给咱们麻烦。 以下图所示,div表现出和咱们预想不一致的结果。
那么怎么才能防止这种父子margin合并致使的和预想不一致问题呢? 解决方法以下(这里直接复制了张鑫旭老师书籍《CSS世界》的原话。): (1)对于margin-top合并(知足一个便可):
border-top
的值(亲测transparent也能够的)padding-top
的值(2)对于margin-bottom合并(知足一个便可):
border-bottom
(transparent也能够的)padding-bottom
height
、min-height
或者max-height
每当说到margin:auto
,个人第一反应是居中。但这个只是一个浅层应用的表象。 接下来咱们去一块儿看看这个margin:auto
到底是‘何方神圣’。
margin:auto
的填充规则以下:
我会疑惑为何我设置了margin: auto
,却在垂直方向上没有居中。
这里《css世界》中给出的答案让人很是容易理解。假如把.son元素的height去掉,.son的高度会自动变成父元素的200px,显然不会,因此没法触发margin: auto。同理,若是把width为200px去掉,确实是会和父元素同样宽。
那么如何让垂直居中呢? 子元素使用绝对定位后设置margin: auto
便可
咱们能够利用border color为透明来绘制一些图形,好比三角形
注意border-color
这个属性。
/* border-color: color; 单值语法 */
border-color: red;
/* border-color: vertical horizontal; 双值语法*/
border-color: red #f015ca;
/* border-color: top horizontal bottom; 三值语法 */
border-color: red yellow green;
/* border-color: top right bottom left; 四值语法 */
border-color: red yellow green blue;
复制代码
固然,咱们绘制三角形不限于这种等腰三角。
这里绘制了一个底边分别是60px和160px的直角三角形。
文章主要参考了张鑫旭老师的《css世界》并根据本身的业务作出的一些实践总结。