css3

187 阅读10分钟

选择器与层级

css 中ul li 与 ul>li的区别

ul li :后代选择器,ul 里所有的 li 元素,包括 ol 里的 li

ul>li :子代选择器,下一级的DOM节点,不包括 ol 里的 li

ul>ol>li :子代选择器必须一代接一代

属性选择器

1.E[attr]:查找指定的拥有attr属性的E标签。如查找拥有style属性的li标签

li[style]{}

2.E[attr=value]:查找拥有指定的Attr属性并且属性值为value的E标签。如想查找拥有class属性并且值为Red的li标签 =是严格匹配

li[class=red]{}

3.E[attr*=value]:查找拥有指定的attr属性并且属性值中包含(可以在任意位置)value的E标签

li[class*=red]{}

4.E[attr^=value]:查找拥有指定的attr属性并且属性值以value开头的E标签

li[class^=blue]{}

5.E[attr$=value]:查找拥有指定的attr属性并且属性值以value开结束的E标签

li[class$=blue]{}

兄弟选择器

+:获取当前元素的相邻的满足条件的元素

下面这句样式说明查找 :添加了.first样式的标签的相邻的li元素

1.相邻

2.必须是指定类型的元素

.first + li{}

必须都是li元素,如果中间插入了其他元素,则+表示相邻的li元素,所以会不起作用

~:获取当前元素的满足条件的兄弟元素

下面样式查找添加了.first样式的元素的所有兄弟li元素

1.必须是指定类型的元素

.first ~ li{}

伪类选择器

相对于父元素的结构伪类

li:first-child{color: red;}

:first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。

li:first-of-type{
	color: red;
}
li:last-of-type{
	color: orange;
}

first-child强调某个父元素的第一个子元素,而:first-of-type强调的是特定类型的第一个,不必是第一个子元素

比如p:first-child,都是基于p的父元素来进行筛选的



指定索引位置 nth-child(从1开始的索引||关键字||表达式)

li:nth-child(5){}
li:nth-child(even){
	background-color: orange;
}
li:nth-child(odd){
	background-color: pink;
}
li:nth-of-type(even){
	background-color: orange;
}
li:nth-of-type(odd){
	background-color: pink;
}

想为前面的5个元素添加样式

li:nth-last-of-type(-n+5){
	font-size: 30px;    
}
li:nth-of-type(-n+5){
	font-size: 30px;
}

空值:没有任何的内容,连空格都没有

li:empty{
	background-color: red;
}

E:target:可以为锚点目标元素添加样式,当目标元素被触发为当前锚链接的目标时,调用此伪类样式

h2:target{
	color: red;
}
<a href="#title1">CSS (层叠样式表)</a>
<h2 id="title1">CSS (层叠样式表)</h2>

伪元素

    div:nth-of-type(2)::before{
​        /**必须添加content属性,否则后期不可见**/content: "";
​        /**默认是行级元素,如果想设置宽高,就必须转换为块级元素**/position: absolute;
​        width: 20px;
​        height: 20px;
​        background-color: #fff;
​        border-radius: 10px;
​        left: -10px;
​        top: -10px;
​    }
​    div:nth-of-type(2)::after{
​    }

获取第一个字符:实现首字下

    p::first-letter{
​       float: left;/**文本环绕**/
​    }

获取第一行内容:如果设置了::first-letter,那么无法同时设置它的样式

    p::first-line{
​    }

设置当前选中内容的样式

它只能设置显示的样式,而不能设置内容大小

    p::selection{
​        background-color: pink;
​    }

常用属性

overflow

  • visible 默认值。内容不会被修剪,会呈现在元素框之外。

  • hidden 内容会被修剪,并且其余内容是不可见的。

  • scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。

  • auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。

  • inherit 规定应该从父元素继承 overflow 属性的值。

overflow:scroll;

字体

字体属性的顺序:字体风格→字体粗细→字体大小→字体类型

p span{font:oblique bold 12px "楷体";}

阴影

添加阴影

text-shadow:offsetX offsetY blur color

多层阴影效果

    .demo3{
​  text-shadow: 0px 0px 30px #fff,0px 0px 50px red,0px 0px 70px #fff;
​    }

可以添加一层阴影,也可以添加多层阴影

盒模型

content-box:你设置的width属性值仅仅是内容的宽度,盒子的最终的宽高值在width的基础上再加上padding和border的宽度(默认)

 box-sizing: content-box;(默认)

border-box:你设置的width属性值就是盒子的最终的宽度,包含了border和padding和内容。如果添加了padding和border,那么真正放置内容的区域会减小--但是它可以稳固页面的结构

 box-sizing: border-box;

圆角矩形

1.设置一个值:四个角的圆角值都一样

border-radius: 10px;

2.设置两个值:第一个值控制左上/右下,第二个值控制右上/左下

border-radius: 10px 30px;

3.设置三个值:第一个值控制左上,第二值控制右上/左下,第三个值控制右下

border-radius: 10px 40px 60px;

4.设置四个值:左上 右上 右下 左

 border-radius: 10px 30px 60px 100px;

添加/是用来设置当前个不同方向的半径值 水平x方向/垂直y方向

border-radius: 100px/50px;

如果想设置四个角点的不同方向上的不同圆角值

分别是水平方向的:左上,右上,右下,左下 / 垂直方向的:左上,右上,右下,左下

border-radius: 100px 0px 0px 0px/20px 0px 0px 0px;

渐变

线性渐变

方向:

    to top:0deg
​    to right:90deg
​    to bottom:180deg --默认值
​    to left:270deglinear-gradient(方向,开始颜色 位置,颜色2 位置,颜色3 位置...)
​   background: linear-gradient(to right, red 0%, red 50%, blue 50%, blue 100%);

径向渐变

形状shape:circle:产生正方形的渐变色

ellipse:适配当前的形状,如果是正方形的容器,两者效果一样.如果宽高不一样,默认效果切换到ellipse

at position:坐标,默认在正中心。可以赋值坐标(参照元素的左上角),也可以赋值关键字(left center right top bottom)

大小size: closest-side:最近边;

farthest-side:最远边;

closest-corner:最近角;

farthest-corner:最远角。

默认是最远的角farthest-corner

    background: radial-gradient(red,blue);
​   语法:radial-gradient(形状 大小 坐标,颜色1,颜色2...)

背景

添加背景颜色

  background-color: skyblue;

添加背影图片

如果图片大于容器,那么默认就从容器左上角开始放置

如果图片小于容器,那么图片默认会平铺

background-image: url("../images/share1.png")

背景颜色和背景图片是可以共同出现的

div {
	width: 300px;     
  height: 300px;     
  background-color: red;     
  background-image: url(./imgs/1.jpg);     
  background-repeat: no-repeat;     
}

页面展示

设置背景平铺

background-repeat:repeat (默认值)
background-repeat:no-repeat (不平铺)
background-repeat:repeat-x (水平方向平铺)
background-repeat:repeat-y (垂直方向平铺)

设置背景位置

background-positiont决定背景图片在盒子区域的定位位置。其方位由水平和垂直决定

div {
	//数字
  background-position: 100px 100px;
  //方向
	水平方向:left,center,right
	垂直方向:top,center,bottom
	background-position: center center; 
	//比例
	水平方向= |盒子宽-图片宽| * scale
	垂直方向= |盒子高-图片高| * scale
  background-position: 50% 50%; 
}

background缩写方式

background:color url repeat postion

background-size

background-size决定背景图在盒子中显示的具体大小,属性值需要同时设置背景图的宽和高。

div {
  //具体数值
  background-size: 200px 50px;
  //百分比,根据盒子的大小来定
  background-size: 50% 10%;
  //auto
  如果宽度是具体数值,高度设置auto,则背景图片的高会根据宽度数值等比拉伸
  如果高度是具体数值,宽度设置auto,则背景图片的宽会根据高度数值等比拉伸
  如果宽高都设置auto,直接使用原背景图的宽高
  background-size: 200px auto;
  //cover英文意思覆盖,那么其涵义就是要求背景图片覆盖整个盒子。
  background-size: cover;
	//contain,要求背景图片的宽和高必须满足其中一个覆盖盒子就行,
	当图片宽和高都小于盒子时图片会被等比拉伸,
	如果图片宽或高大于等于盒子宽或者高就停止拉伸。
	background-size:contain;
}

background-clip和background-origin

background-clip决定了背景颜色从盒子的什么位置开始渲染

background-origin决定了背景图片从盒子的什么位置开始渲染

background-clip: border-box(从盒子边距开始)
background-clip: content-box(从盒子内容开始)
background-clip: padding-box(默认值,从盒子padding开始)

过渡

简写:transition:属性名称 过渡时间 时间函数 延迟

  transition: left 2s linear 0s;

为多个样式同时添加过渡效

transition: left 2s linear 0s,background-color 5s linear 0s;

1.所有样式的过渡效果一样

2.效率低下,它会去查询所有添加的样式

3.建议:以后不要这么写

4.steps(4):可以让过渡效果分为指定的几次来完成 等于说是一帧一帧的跳动

  transition:all 2s steps(4);

transform二维变换

使用transform实现元素的移动 a.移动是参照元素的左上角 b.执行完毕之后会恢复到原始状态

    /*transform: translate(400px,500px);*/ X,Y轴的移动

​    transform:translateY(300px);

​    transform:scaleY(0.5); 放大和缩小,1为灵界点

​    transform-origin: left top; 可以设置旋转的中心

​    transform: translateX(700px) rotate(-90deg);

​    transform:skew(-30deg);斜切

动画

添加动画效果

1.animation-name:指定动画名称

animation-name: moveTest;

2.设置动画的总耗时

animation-duration: 2s;

3.设置动画的播放次数,默认为1次 可以指定具体的数值,也可以指定infinite(无限次)

animation-iteration-count: 1/infinite;

4.设置交替动画 alternate:来回交替

animation-direction: alternate;

5.设置动画的延迟

animation-delay: 2s;

6.设置动画结束时的状态:默认情况下,动画执行完毕之后,会回到原始状态

forwards:会保留动画结束时的状态,在有延迟的情况下,并不会立刻进行到动画的初始状态

backwards:不会保留动画结束时的状态,在添加了动画延迟的前提下,如果动画有初始状态,那么会立刻进行到初始状态

both:会保留动画的结束时状态,在有延迟的情况下也会立刻进入到动画的初始状态

animation-fill-mode: both;

7.动画的时间函数

animation-timing-function: linear; (这个表示匀速,可以开始比较满或者快或者)

设置动画的播放状态 paused:暂停 running:播放

animation-play-state: running;

动画moveTest

   @keyframes moveTest {
​    百分比是指整个动画耗时的百分比  10sfrom{
​        transform: translate(0,0) rotate(45deg);
​    }
​    50%{
​        transform: translate(0,500px);
​    }
​    to{
​        transform: translate(500px,600px);
​        }
​    }

多列布局

1.设置列数

column-count: 3;

2.添加列间隙样式,与边框样式的添加一样

column-rule: dashed 3px red;

3。设置列间隙大小

column-gap: 50px;

4.设置列宽

原则:取大优先

1.如果人为设置宽度更大,则取更大的值,但是会填充整个屏幕,意味最终的宽度可能也会大于设置的宽度--填充满整个屏幕

2.如果人为设置宽度更小,使用默认计算的宽度

    column-width: 200px;

设置上面这些属性应该在文字的盒子上

设置跨列显示 1 / all

    column-span: all;