CSS变量
示例
1 | :root { |
使用方式
1 | color: var(--blue); |
语法
CSS 变量(Custom Properties)是一种保存和重复使用值的机制,可以在 CSS 中使用。
它们提供了一种更灵活和可维护的方式来管理和修改样式。
以下是 CSS 变量的用法:
定义变量:使用 “:root” 选择器为根元素定义变量。
在其中使用双破折号(–)来命名变量,并为其赋值。
例如:
1 | :root { |
使用变量:使用 var()
函数在 CSS 中引用变量。
可以在任何可以设置属性值的地方使用该函数。
例如:
1 | .element { |
这将应用 --color-primary
变量的值作为颜色。
变量的继承:变量可以在 CSS 中进行继承。
当一个元素没有指定某个变量的值时,它会从父级元素中继承该变量的值。
例如:
1 | :root { |
在这个例子中,.child
元素的颜色将是红色,因为它继承了 .parent
元素中的 --color-primary
变量的值。
动态修改变量:可以使用 JavaScript 动态修改 CSS 变量的值。通过操作根元素的样式属性或使用 CSSOM 来完成。例如:
1 | document.documentElement.style.setProperty('--color-primary', 'green'); |
这将把 --color-primary
变量的值更改为绿色。
CSS 变量提供了更强大和灵活的样式控制方式,使得样式的修改和维护更加简单和可维护。
判断IE版本
1 | <style> |
Flex容器适配子元素
Flex布局默认宽高是适配父元素的。
有时候我们想让Flex的容器的宽度随着子元素自动适配,可以这样设置:
1 | .container { |
文本样式
文字竖排
1 | writing-mode: vertical-lr; |
禁止选择
1 | moz-user-select: -moz-none;/*火狐浏览器*/ |
字体
1 | font-family: "Microsoft YaHei", "Arial", simsun, sans-serif; |
字体小于12px
避免不支持CSS3浏览器的情况,我们也可以通过降级处理,将字体变回12px
;最后兼容 IE:*font-size:10px;
1 | .font{ |
自动换行
1.强制换行:
1 | /* 按字符截断换行 支持IE和chrome,FF不支持*/ |
注意:单词换行需要父盒子为块级元素
2.自动换行:
1 | word-wrap:break-word; |
3.强制不换行:
1 | white-space:nowrap; |
行样式
1 | line-height:200% !important; |
字符间距
- 中文字间距(
letter-spacing
) - 字母间距(
word-spacing
)
缩进
1 | p{text-indent:2em;} |
本来想让P标签内容首行缩进2个字,但是很不幸,文章有P标签下有img
标签,导致图片也跟着缩进了,版式很糟糕
解决方法
text-indent
遇到display:block
或者float
就不生效了,也就是给图片加上display:block
即可
示例
1 | p{ |
下划线
1 | p a{text-decoration:underline;} |
文字前面小圆点
1 | span.success { |
删除线
1 | .z_del { |
text-decoration属性有以下几个取值:
- none:默认值,没有装饰线。
- underline:文字带下划线。
- overline:文字带上划线。
- line-through:文字中间有一条删除线。
超出显示省略号
1 | .z_ellipsis_item { |
关键属性
1 | overflow: hidden; |
单选按钮
1 | <div class="hl"> |
样式
1 | input[type="radio"] { |
圆角
1 | -moz-border-radius: 6px; /* Mozilla浏览器的私有属性 */ |
边框
1 | border: 1px solid #ddd; |
边框渐变
1 | border: 1px solid #25b7e5; |
背景
背景图
1 | background: url('../images/arrow_up.png') center center no-repeat; |
背景颜色渐变
1 | .leftbar { |
禁用li样式
1 | list-style: none; |
相同间距等宽
每行3个元素,中间间距是10px
1 | .banklist { |
注意
nth-child(3n+1)
选择元素是从1开始的。元素第一个是1,n是从0开始算的。
calc((100% - 20px) / 3)
这个表达式是支持乘除的。
滚动条
自定义滚动条
1 | ::-webkit-scrollbar { /*滚动条整体样式*/ |
隐藏滚动条
隐藏滚动条但是可以滚动
1 | .content::-webkit-scrollbar { |
Table
1 | table { |
textarea
禁止拖拽大小
1 | resize:none; |
渐变色
1 | .d_btn { |
背景渐变
1 | .title2 { |
阴影
1 | box-shadow: 0 0 10px 2px #ccc; |
使用 CSS 的 box-shadow 属性我们可以为 HTML 元素设置阴影效果,属性的语法格式如下:
box-shadow: h-shadow v-shadow blur spread color inset;
语法说明如下:
- h-shadow:必填参数,设置阴影水平方向的偏移量,可以为负值;
- v-shadow:必填参数,设置阴影垂直方向的偏移量,可以为负值;
- blur:可选参数,设置模糊的半径,值越大,模糊越大,阴影的边缘越模糊,不允许使用负值;
- spread:可选参数,设置阴影的尺寸;
- color:可选参数,设置阴影的颜色;
- inset:可选参数,将默认的外部阴影 (outset) 改为内部阴影。
内部阴影
1 | box-shadow: 2px 2px 5px #000 inset; |
渐变同心圆
1 | .img_div { |
效果如图
注意
box-shadow
配置的颜色是自内到外的,并且后面的宽度一定要比前面的大,否则会被前面的遮住。
粘性定位
要想实现元素滚动后会定在固定的位置,如果用JS就是判断根据用户滚动的高度 把元素的位置移动一下,还是相对麻烦的。
但是使用粘性定位就很简单了
在每一个元素上面 加两行样式代码就搞定了
1 | position: sticky; |
粘性定位可以被认为是相对定位和固定定位的混合。
元素在跨越特定阈值前为相对定位,之后为固定定位。
兼容IE
https://github.com/wilddeer/stickyfill
HTML
1 | <div class="sticky"> |
CSS
1 | .sticky { |
JS
静态页面中:
下载JS
https://raw.githubusercontent.com/wilddeer/stickyfill/master/dist/stickyfill.min.js
页面引用
1 | <script src="path/to/stickyfill.min.js"></script> |
使用
1 | var elements = document.querySelectorAll('.sticky'); |
Webpack中:
使用NPM
1 | npm install stickyfilljs --save |
使用
1 | import Stickyfill from "stickyfilljs"; |
JS添加样式
方式1
1 | var css = ` |
添加样式
1 | let item2 = document.createElement("div"); |
方式2
1 | menu_div.style.cssText = ` |
方式3
1 | menu_div.style.position = "absolute"; |
JS添加hover样式
方式1
1 | let test_div = document.querySelector('.test'); |
方式2
1 | var css = ` |
添加样式
1 | let item2 = document.createElement("div"); |
父盒子未撑开
有这么一种情况,子盒子的宽度比较大,父盒子没有设置宽度,但是父盒子没有被子盒子撑开,父盒子的宽度是父盒子的外部盒子的宽度。
解决方式有以下几种
方式1(推荐)
父盒子设置
1 | display:inline-block; |
inline-block的特点:
- 设置为inline-block的元素仍然呈现为inline元素,但是其中的内容作为block内容呈现。
- width,height,margin,padding属性有效。
- 相邻的元素仍然在同一行内排列。
- 如果不设置宽高,宽高根据内部计算。
方式2
父盒子设置
1 | float:left; |
方式3
父盒子设置
1 | overflow: auto; |
但是这种方式会导致滚动调在父盒子内部。
CSS3按钮
步骤
- 做出圆角图形
- 在圆角图像实现渐变
- 给图形加阴影
- 给文字加阴影
CSS
1 | .button { |
调用方式
1 | <a href="#" class="button orange">Orange</a> |
声音跳动效果
HTML
1 | <div class="p-waves-group"> |
CSS
1 | .p-waves-group { |
iOS Webview兼容
内部可视区域高度
浏览器兼容,内部可视区域高度,最好的解决方式是用js动态计算
方式1
1 | .content { |
方式2
1 | .content { |
居中
通过display:flex
可以垂直居中和水平居中
父元素中添加样式
1 | .outdiv { |
通过绝对定位和transform
可以垂直居中和水平居中
1 | .outdiv { |
通过绝对定位和Margin
可以垂直居中和水平居中
1 | .outdiv { |
vertical-align
可以垂直居中和水平居中
支持vertical特性的对象是内联块
,意思就是两个内联块中部对齐。
所以我们可以利用这个幽灵空白节点,让图片与这个空白节点的中部对齐就可以实现图片的垂直居中。
通过vertical-align:middle
和伪元素实现CSS垂直居中。
但是有一点需要格外注意。
vertical-align
生效的前提是元素的display:inline-block
。在使用
vertical-align:middle
的时候需要一个兄弟元素做参照物,让它垂直于兄弟元素的中心点。
vertical-align
对齐的方法是寻找兄弟元素中最高的元素作为参考。
通过伪元素
具体方式是为父元素添加伪元素:before
,使得子元素实现垂直居中。
1 | .outdiv { |
或者
利用line-height
1 | .outdiv { |
还有其它的方式,但是随着浏览器的更新很多都无效了,推荐前两种。
文字居中
如果是让一段文字居中
需要在css样式中敲入:
1 | .outdiv { |
居中不生效
CSS margin:0 auto
不居中的解决方法
必须是块级元素
如果是块级元素居中
如div等元素,需要在css样式中敲入
1 | .outdiv { |
如果是非块级元素居中
如video,a,canvas等元素,需要在css样式中敲入
1 | .outdiv { |
calc计算错误
1 | width: calc(100% - 40px); |
Less 本身会进行计算。所以编译完就是calc(60%)
;
可以写成
1 | width: calc(~"100% - 40px"); |
或者
1 | width: ~"calc(100% - 40px)"; |
Vue引用样式
局部引用
引入方式
1 | <style src="@/assets/scss/common.scss" lang="scss" scoped></style> |
下面的方式会导致污染
在vue文件中的<style>
内填写需要引用的文件
1 | <style scoped lang="scss"> |
注意
使用@import引入样式文件,就算加scoped,其它没有引入的模块还是可以访问到你的样式,如果某个组件的类名一致,则就会被污染到。
全局引入
main.js
1 | import './assets/css/common.css' |