选择器

基本选择器机器扩展

/* 通配符选择器-* */
*{
	margin:0;
	padding:0;
}
/*id选择器*/
#id{
    background-color:#123456;
}
/*类选择器-.*/
.item{
    width:100px;
    height:100px;
}
/*元素选择器-元素名*/
input{
    outline:none;
}
/*后代选择器-空格*/
.item ul li{
    color:blue;
}
/*子元素选择器*/
.father > .son{
    position:absolute;
}
/*通用兄弟选择器*/
.first ~ .third{
    color:green;
}
/*相邻兄弟选择器*/
.first + .second{
    color:red;
}
/*分组选择器-结合符(,)*/
h1,h2,h3{
    color:black;
}


/*属性选择器*/
div[attr]{		/*含有attr属性的元素*/
    background-color:pink;
}
div[attr=val]{		/*匹配属性attr值为val的元素*/
    background-color:pink;
}
div[attr~=val]{		/*匹配属性attr值含有val(以空格分隔)的元素*/
    background-color:pink;
}
div[attr|=val]{		/*匹配属性attr值以val或以val-开头的元素*/
    background-color:pink;
}
div[attr^=val]{		/*匹配属性attr值以val开头的元素*/
    background-color:pink;
}div[attr$=val]{		/*匹配属性attr值以val结尾的元素*/
    background-color:pink;
}
div[attr*=val]{		/*匹配属性attr值包含字符串val的元素*/
    background-color:pink;
}

/*伪类选择器*/
	/*链接伪类*/
a:link{		/*未被点过的a标签*/
    color: blue;
}
a:visited{	/*已被点过的a标签*/
    /* 只有color,background-color,border-color能应用于此选择器中 */
    color:green;
}
#container:target .item{	/*id为container且被锚点指向的元素 -> 其后代的含类名item的元素*/
    display:block;
}
	/*动态伪类*/
.box:hover{		/* 被鼠标滑入的.box */
    color:red;
}
.box:active{	/* 被鼠标点住的.box */
    color:blue;
}

	/*表单伪类*/
input:enabled{		/*未被禁用的表单*/
    background-color:green;
}
input:disabled{		/*已被禁用的表单*/
    background-color:red;
}
input:checked{		/*被选中的表单*/
    width:100px;
    height:100px;
}
input:focus{		/*被聚焦的表单*/
    opacity:0.6;
}

	/*结构性伪类*/
.item:nth-child(1){		/*与.item同级的元素中(包含它本身)第1个元素*/
    /*
    .item:first-child			是第一个子元素的元素
    .item:last-child			是最后一个子元素的元素
    ,item:nth-last-child(n)		与此同级的元素中的倒数第n个元素
    .item:only-child			是其父元素的唯一子元素
    */
    color: red;
}
.container div:nth-of-type(2){	/*与此div同级的元素中的第2个div*/
    /*			以元素为中心--就算是用类选择器来选择,得到的也是第n个同类标签元素
    div:first-of-type
    div:last-of-type
    div:nth-last-of-type	
    div:only-of-type		其父元素的唯一div
    */
    color:blue;
}
.box:empty{		/*内容为空的.box(空格都不能有)*/
    background-color:red;
}
a:not(:last-of-type){		/*去除某些选择器后所选的元素*/
    border-right:1px solid red;
}

	/*伪元素选择器*/
div:before{		/*由css生成的在元素之前的结构*/
    content"";
    display:block;
}
div:after{		/*由css生成的在元素之后的结构*/
    content:"";
    display:block;
}
p::first-letter{	/*元素内文本首个字符*/
    font-size:20px;
}
p::first-line{		/*元素中的首行*/
    font-size:20px;
}
div::selection{		/*元素中文本被选中*/
    background-color:red;
    color:pink;
}



/*有的浏览器为html,body*/
:root{	/*选中根元素*/
    border:1px solid black;
}

声明的优先级

声明的结束分号之前可插入!important来标志,表示最重要的声明,覆盖其他所有声明

  • css样式的来源大致有三种:

    • 创作人员(程序员)
    • 读者(用户)
    • 用户代理(浏览器)
  • 权重:

    1. 读者的重要声明
    2. 创作人员的重要声明
    3. 创作人员的正常声明
    4. 读者的正常声明
    5. 用户代理的声明
  • 层叠:

    1. 找出所有相关的规则,这些规则都包含一个选择器

    2. 计算声明的优先级:

      1. 先按来源排序
      2. 再按选择器的特殊性排序
      3. 最终排序

自定义字体

<style type="text/css">
@font-face{
    font-family:"Damu";		/*自定义字体名*/
    src:url(./xx.ttf);		/*字体文件*/
}

div.test{
    font:50px "Damu";	/*使用*/
}
</style>

新增UI方案

文本新增样式

.test{
	word-break: keep-all; /* normal自动换行、break-all允许在单词内换行、keep-all只能在半角空格或连字符处换行 */
}
.test1{
    word-wrap: break-word; /* normal自动换行、break-word强制换行 */
}
.test{
	opacity:0.5;
    color:rgba(255,255,255,.5);
    text-shadow: 2px 3px 4px pink
        		3px 4px 5px black;
}
.test{
	-webkit-text-stroke: 4px pink;
}
.test{
	direction:rtl;				/*文本排列方向-需配合下面的unicode-bidi使用*/
    unicode-bidi:bidi-override;
}
.test{
    white-space:nowrap;			/*文本不换行*/
    overflow:hidden;
    text-overflow:ellipse;		/*多出内容省略号显示*/
}

盒模型新增样式

.test{
    box-shadow: 5px 5px 20px 10px gray,		/*第四个可选为阴影缩放,大于0放大,小于0缩小*/
        		inset -5px -5px 20px gray;	/*第一个可选,添加后,为盒子内部阴影 inset也可放在后面*/
}
.test{
	-webkit-box-reflect:left 10px;		/*方向,偏移量*/
}
.test{
	overflow:auto;
	resize:horizontal;	/*none:不可缩放,horizontal:水平可缩放,vertical:垂直可缩放,both:水平垂直均可缩放*/
}
.test{
	box-sizing:border-box;
}

新增UI样式

.test{
    border-radius:10px/20px 20px/10px 10px/20px 20px/10px;	/*a/b 	横半轴/纵半轴*/
}
.test{
    border:30px solid;
    /*边框图片路径*/
    border-image-source: url(xxx.png);
    /*边框切割  切割距离(横上,纵右,横下,纵左),fill可不写,加上fill即将边框图片中间设置为background-image*/
    border-image-slice: 33.33333% fill;
    /*边框图片拉伸方式*/
    border-image-repeat: round;
    /*边框图片宽度-不写默认继承border-width*/
    border-image-width: 20px;
    /*将边框图片向外扩展,但边框位置不变(只是变了图片位置)*/
    border-image-outset:10px;
}
.test{
    background-color:pink;
    background-image:url(xx.png);
    background-repeat:no-repeat;
    /*图片位置*/
    background-position: -10px 10px;
    background-attachment:fixed;/*将背景扩到视口范围--不推荐用*/
    
    /*css3*/
    /*背景图片的渲染起始位置-- border-box,padding-box,content-box*/
    background-origin: content-box;
    /*背景图片裁剪位置*/
    background-clip:content-box;
    /*将图片只在文字区域显示--配合透明文本使用*/
    -webkit-background-clip:text;
    /*图片大小*/
    background-size: 100% 100%;
    
    /*渐变*/
    background-image:linear-gradient(to right,red 10%,green 50%);
    /*重复渐变*/
    background-image:repeating-linear-gradient(45deg,red,rgba(255,0,0,0) 50%);
    
    /*径向渐变*/
    background-image:radial-gradient(circle,yellow 10%, pink 70%);
    background-image:radial-gradient(closest-side,yellow 10%, pink 70%);
}

定位与浮动

滚动条问题

html,body{
	overflow:auto;
}

过渡

.test{
    transition-property: width, height, font;	/*过渡属性(指可被动画的属性)*/
    transition-duration: 3s, 2s;	/*过渡时间(周期)-与属性一一对应(数量不对应时,会复制对应,即  3s, 2s, 3s, 2s...)*/
    transition-timing-function: linear, cubic-bezier(.28,1.64,.76.-0.5);/*控制变化速度  ease(先加速后减速,默认) ease-in(加速) ease-out(减速) linear(匀速)贝塞尔曲线cubic-bezier(.28,1.64,.76.-0.5) step-start step-end steps(5,start)*/
        /*cubic-bezier.com*/
    transition-delay: 3s;	/*延迟过渡时间-参数不足重复列表*/
    
    
    /*简写*/
    transition: 3s width,
        		2s height linear 4s;
}
window.onload = function(){
    var testNode = document.querySelector("#test");
    document.body.onmouseover = function(){
        testNode.style.width = "300px";
        testNode.style.height = "300px";
    };
    testNode.addEventListener("transitionend",function(){
        alert("transitionend!");		//每一个属性的过渡事件完成后都会触发一次transitionend事件,如果在过渡完成前,dom元素display已经成为none,则此事件不会触发
    });
}

transition在元素首次渲染还没有结束的情况下是不会被触发的

2D变形

.test{
    transform: translate(50%,50%) rotate(90deg) scale(1.1) skew(30deg);
}
.test1{
    transform: matrix(1,0,0,1,0,0);
}

3D变形

景深-perspective

.wrap{
    width: 400px;
    height: 400px;
    border: 1px solid black;
    
    perspective: 200px;		/*景深,简单来说,就是眼睛距离屏幕的距离  用于搭建舞台,使其后代元素具有3D效果(近大远小)  景深会叠加-不同浏览器叠加机制不同,所以要避免景深叠加*/
    perspective-orgin: left top;	/* 视角的位置,简单理解,perspective控制视角距离屏幕的z轴位置,perspective-orgin控制x轴与y轴位置 */
    /*另一种使用方法*/
    transform:perspective(200px) rotateY(30deg);	/*这种方法使景深作用于元素本身,而不是作用于后代元素,且perspective()必须放在首位*/
}
.inner{
    width:200px;
    height: 200px;
    border-radius:50%;
    
    transition: 2s;
}
.inner:hover{
    transform: rotateX(360deg);
}

舞台 transform-style

.wrap{
    width: 400px;
    height: 400px;
    border: 1px solid black;
    
    perspective: 200px;
    
    transform-style: preserve-3d;	/* 营造具有层级的3d舞台,不可集成,作用于子元素 */
}
.inner{
    width:200px;
    height: 200px;
    border-radius:50%;
    
    transition: 2s;
}
.inner:hover{
    transform: rotateX(360deg);
}

背面 backface-visibility

.wrap{
    width: 400px;
    height: 400px;
    border: 1px solid black;
    
    perspective: 200px;
    
    transform-style: preserve-3d;
}
.inner{
    width:200px;
    height: 200px;
    border-radius:50%;
    
    transition: 2s;
    
    backface-visibility: hidden;	/* 即从背面无法看到此元素,只能从正面看到 */
}
.inner:hover{
    transform: rotateX(360deg);
}

动画

.test{
    width: 100px;
    height: 100px;
    background-color: pink;
    
    animation-name: test;				/*指定动画名称*/
    animation-duration: 3s;				/*一次动画持续时间*/
    animation-timing-function: linear;	/*动画速率函数-参照transition---作用于每两个关键帧之间*/
    animation-delay: 1s;				/*动画延迟时间*/
    animation-iteration-count: 3;		/*动画执行次数*/
    animation-direction: reverse;		/*动画执行方向-reverse即从100%关键帧到0%关键帧执行 alternate即从from-to-from-to...,alternate-reverse即to-from-to-from...*/
    animation-fill-mode: backwards;		/*控制元素在动画外的状态 backwards:动画执行前状态与开始状态保持一致  forwards:动画执行后状态保持最终状态   both:backwards加上forwards*/
    animation-play-state: running;		/*用于控制动画的暂停-running为正常执行,pause为暂停(可结合hover等使用来控制动画的进行)*/
}
@keyframes test{		/*开始编写动画样式-关键帧动画*/
    from{		/*from代表0%,to代表100%*/
        background-color: orange;				/*开始状态*/
    }to{
        background-color: skyblue;			/*最终状态*/
    }
}

布局

flex布局-弹性盒子布局

.test{
	width: 100px;
    height: 100px;
    display: -webkit-box;
    /* -webkit-box-orient控制主轴是哪一个 */
    -webkit-box-orient: vertical;
    /* -webkit-box-direction 控制主轴排列方向 正排列/反排列*/
    -webkit-box-direction: reverse;
    /* -webkit-box-pack 控制富裕空间  start(富裕空间在项目右边) end center justify(富裕空间在项目中间) */
    -webkit-box-pack: center;
    /* -webkit-box-align 控制侧轴富裕空间 start end center */
}

.new{
    width: 100px;
    height: 100px;
    display: flex;
    /* justify-content 富裕空间管理 flex-start flex-end center space-around space-between */
    justify-content: space-around;
    /*align-items 侧轴富裕空间管理 start end center baseline(子元素在父元素的基线上) stretch(等高布局|不指定高度)*/
    align-items: center;
    
    /* flex-direction 控制布局方向(控制主轴)+ 排列方向 */
    flex-direction: column-reverse;
    flex-wrap: wrap;	/* nowrap:不换行,单行显示;wrap:多行显示,即换行;wrap-reverse:多行,但为反向 */
    flex-flow: column-reverse wrap;	/* 上面两个的复合 */
}

.item{
    flex-grow: 2;	/* 定义子元素放大比例,即当所有子元素宽度之和小于父元素时,子元素会被放大,此属性就是定义这个放大的比例的 */
    flex-shrink: 1;	/* 同上,定义缩小比例 */
    flex-basis: 300px;	/* 定义子元素宽度,效果同width,但只对弹性盒子的子元素生效 */
    flex: 2 1 300px;	/* 效果同上,为上面三个的符合属性 */
    
    order:2;		/* 定义排列顺序 */
}

多列布局

.test{
	column-count: 3; /* 多列布局的列数 */
    column-width: 100px; /* 每一列的宽度 auto表示由列数决定 */
    column-gap: 10px; /* 定义列与列之间的间距 normal为浏览器默认长度 */
    column-rule: 2px solid red; /* 定义边框样式 */
    column-span: all; /* 表示跨列 */
}

滤镜

.test{
    filter: brightness(80%)	/* 亮度:0%为黑色,0-100为减弱图片亮度,往上为增大亮度 */
    		grayscale(10%)		/* 灰度:0%表示不做修改,100%为完全黑度 */
    		sepia(0%)			/* 复古:即褐色滤镜,100%为完全褐色滤镜 */
    		invert()			/* 反转:颜色反转,100%为反转所有颜色 */
    		hue-rotate(120deg)	/* 旋转:色相旋转,0-360deg */
    		drop-shadow(5px 5px 5px red)	/* 阴影:前两个为偏移量,第三个为模糊程度,最后为阴影颜色 */
    		opacity(60%)		/* 透明度:0为完全透明 */
    		blur(2px)			/* 模糊:像素值越大,模糊程度越大 */
    		contrast(100%)		/* 对比度:100%向下为减弱对比度,向上为增强对比度 */
    		saturate(100%);		/* 饱和度:100%向下为减弱饱和度,向上为增强饱和度 */
}

其他

.test{
	outline: 1px solid red;	/* 定义轮廓,同边框 */
    
    xx: initial;			/* 将某个属性重置为默认值,如默认color为black */
    
    width: cacl(100% - 30px);	/* calc()函数,可用于计算数值,里面空格分隔 */
    
    pointer-events: none;		/* 禁用鼠标单击事件 */
}
DORAKIKA
我是一个喜欢折腾的前端工程师,对一切新鲜事物充满好奇,希望我的文章能给你带来思考和帮助
👋我是DORAKIKA
分享作者『DORAKIKA』发表的文章『css3学习笔记』https://blog.dorakika.cn/post/20210607/
© 请您在需要时著名本文内容来源信息,若在文末注明“参考、扩展”等字样涉及转载第三方内容,请您一同复制
自定义右键菜单
自定义右键菜单
为博客添加一个右键菜单