css学习笔记

字体

1.绝对单位和相对单位

css有绝对单位cm和pt点等和相对单位,px,em,百分比

为什么说像素px是一个相对单位呢,这也很好理解。比如说,电脑屏幕的的尺寸是不变的,但是我们可以让其显示不同的分辨率,在不同的分辨率下,单个像素的长度肯定是不一样的啦。

百分比%这个相对单位要怎么用呢?这里也举个例子:

2.font字体属性:行高

工程师有个规定: 行高、字号,一般都是偶数

字是在行内的

文字在自己的行里一直都是集中的,如果一段文本只有一行,如果此时设置行高 = 盒子高,就可以保证单行文本垂直居中。

如果想让多行文本居中,就要计算了,已知盒子的高度和行高,先算出总行高,再用盒子的高减去总行高,除以二算出padding,就能多行文本居中了,也可以加个盒子,让盒子垂直居中

3.行内元素的vertical-align: middle;

行内元素、行内块元素(inline-block)设置文本的垂直对齐方式,

4.字体的连写

ps:加粗是font-weight

	font: 加粗 字号/行高/ 字体
	font: 400 14px/24px "宋体";

一定要有字号和字体,否则等于没有这行代码,400是正常,700是加粗

ps:行高可以用百分比,表示字号的百分之多少

比如font:12px/200% “宋体”等价于font:12px/24px “宋体”

5.字体的备选
	font-family: "微软雅黑","宋体";

逗号提供备选字体

如果用户电脑里没有安装微软雅黑字体,那么就是宋体

我们须将英语字体放在最前面,这样所有的中文,就不能匹配英语字体,就自动的变为后面的中文字体:

	font-family: "Times New Roman","微软雅黑","宋体";

overflow属性

  • visible:默认值。多余的内容不剪切也不添加滚动条,会全部显示出来。
  • hidden:不显示超过对象尺寸的内容。
  • auto:如果内容不超出,则不显示滚动条;如果内容超出,则显示滚动条。
  • scroll:Windows 平台下,无论内容是否超出,总是显示滚动条。Mac 平台下,和 auto 属性相同。

css高级选择器

高级选择器:

  • 后代选择器:用空格隔开,该元素下的所有指定后代,不一定是儿子

  • 交集选择器:选择器之间紧密相连 h3.special {color: red;}

    必须是 h3 标签,然后必须是 special 标签

  • 并集选择器(分组选择器):用逗号隔开

  • 伪类选择器

其他选择器

子代选择器: > 号,很明确的父子关系

序列选择器 ::last-child

兄弟选择器:+ 号,选择的是 h3 元素后面紧挨着的第一个(p)兄弟。

<h3>我是一个标题</h3>
<p>我是一个段落</p>
<p>我是一个段落</p>
<p>我是一个段落</p>

伪类

分类

根据其不同的种状态,有不同的样式。这就叫做“伪类”。

(1)静态伪类:只能用于超链接的样式。如下:

  • :link 超链接点击之前
  • :visited 链接被访问过之后

PS:以上两种样式,只能用于超链接。

(2)动态伪类:针对所有标签都适用的样式。如下:

  • :hover “悬停”:鼠标放到标签上的时候
  • :active “激活”: 鼠标点击标签,但是不松手时。
  • :focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点)

超链接a的伪类

横跨两类伪类;静动态都有

  • :link “链接”:超链接点击之前1
  • :visited “访问过的”:链接被访问过之后4
  • :hover “悬停”:鼠标放到标签上的时候2
  • :active “激活”: 鼠标点击标签,但是不松手时。3

这四种状态必须按照固定的顺序写

a:link 、a:visited 、a:hover 、a:active

问:既然a{}定义了超链的属性,和a:link{}定义了超链点击之前的属性,那这两个有啥区别呢?

答:

a{}a:link{}的区别:

  • a{}定义的样式针对所有的超链接(包括锚点)
  • a:link{}定义的样式针对所有写了href属性的超链接(不包括锚点)

css 的继承性

  • 关于文字样式的属性,都具有继承性。这些属性包括:color、 text-开头的、line-开头的、font-开头的。

  • 关于盒子、定位、布局的属性,都不能继承。

各种选择器(浏览器兼容性)

IE6层面兼容的选择器: 标签选择器、id选择器、类选择器、后代、交集选择器、并集选择器、通配符。如下:

     div 标签选择器

     .box 类名选择器

     #box id选择器

     div p 后代选择器

     div.box 交集选择器

     div,p,span 并集选择器

     div>p 子代选择器

     * : 通配符

     div+p: 选中div后面相邻的第一个p

     div~p: 选中的div后面所有的p

IE7能够兼容的:儿子选择器、下一个兄弟选择器。如下:

div>p
h3+p

IE8能够兼容的:

ul li:first-child
ul li:last-child

属性选择器

属性选择器的标志性符号是 []

匹配含义:

^:开头  $:结尾  *:包含

格式:

  • E[title] 选中页面的E元素,并且E存在 title 属性即可。

  • E[title="abc"]选中页面的E元素,并且E需要带有title属性,且属性值完全等于abc。

  • E[attr~=val] 选择具有 att 属性且属性值为:用空格分隔的字词列表,其中一个等于 val 的E元素。

      /*  E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的*/
            .attr2 a[class~="download"] {
                color: red;
            }
    
    <a href="./a.rmvb" class="download download-movie">下载</a>
    
  • E[attr|=val] 表示要么是一个单独的属性值,要么这个属性值是以“-”分隔的。

     /*  E[attr|=val] 表示的要么一个单独的属性值 要么这个属性值是以"-"分隔的*/
            .attr3 a[class|="download"] {
                color: red;
            }
    
    <a href="./a.rmvb" class="download download-movie">下载</a>
    
  • E[title^="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 开头。

  • E[title$="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 结尾。

  • E[title*="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值任意位置包含abc。

结构伪类选择器

1、格式:(第一部分)

  • E:first-child 匹配 E 元素的父元素的第一个子元素E。

  • E:last-child 匹配 E 元素的父元素的最后一个子元素E。

  • E:nth-child(n) 匹配 E 元素的父元素的第n个子元素E。注意,盒子的编号是从1开始算起,不是从0开始算起。

  • E:nth-child(odd) 匹配奇数

  • E:nth-child(even) 匹配偶数

  • E:nth-last-child(n) 匹配父元素的倒数第n个子元素E。

理解:

(1)父元素的含义,它指的是:以 E 元素的父元素为参考。

(2)注意:以上选择器中所选到的元素的类型,必须是指定的类型E,如果选不中,则无效。这个要好好理解,具体可以看CSS参考手册中的E:nth-child(n)的示例。我们可以理解成:先根据选择器找到选中的全部位置,如果发现某个位置不是类型E,则该位置失效

2、格式:(第二部分)

  • E:first-of-type 匹配同类型中的第一个同级兄弟元素E。

  • E:last-of-type 匹配同类型中的最后一个同级兄弟元素E。

  • E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E。

  • E:nth-last-of-type(n) 匹配同类型中的倒数第n个同级兄弟元素E。

既然上面这几个选择器带有type,我们可以这样理解:先在同级里找到所有的E类型,然后根据 n 进行匹配。

3、格式:(第三部分)

  • E:empty 匹配没有任何子节点(包括空格等text节点)的元素E。

  • E:target 匹配相关URL指向的E元素。要配合锚点使用。

伪元素选择器

伪元素选择器的标志性符号是 ::

1、格式:(第一部分)

  • E::before 设置在 元素E 前面(依据对象树的逻辑结构)的内容,配合content属性(指定内容)一起使用。
  • E::after 设置在 元素E 后面(依据对象树的逻辑结构)的内容,配合content属性(指定内容)一起使用。

E:afterE:before在旧版本里是伪类,在 CSS3 这个新版本里是伪元素。新版本里,E:afterE:before会被自动识别为E::afterE::before,按伪元素来对待,这样做的目的是用来做兼容处理。

举例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>

        /*::before 和::after 是通过 css 模拟出的html标签的效果*/
        span::before{
            content:"smyhvae";
            color:red;
            background-color: pink;
            width: 50px;
            height: 50px;
            display: inline-block;
        }

        span::after{
            content:"永不止步";
            color:yellowgreen;
        }

        /*给原本的span标签设置一个默认的属性*/
        span{
            border: 1px solid #000;
        }
    </style>
</head>
<body>

<span>生命壹号</span>
</body>
</html>

效果如下:

  • 通过伪元素选择器,就可以添加出类似于span标签的效果(记得要结合 content 属性使用)。

  • 通过这两个属性添加的伪元素,是行内元素,需要转换成块元素才能设置宽高。

盒子

如果想保持一个盒子的真实占有宽度不变,那么加width的时候就要减padding。加padding的时候就要减width

综合属性的写法:(上、右、下、左)(顺时针方向,用空格隔开。margin的道理也是一样的)

如果只写了三个值,则顺序为:上、右、下。??和右一样。

标准文档流

标准文档流有三个特性

  1. 空白折叠
  2. 底边对齐
  3. 自动换行,无论文本还是容器

行内元素和块级元素

1.行内元素和块级元素

2.行内元素和块级元素的转换

display:inline,就真的转换成行内元素了,有行内元素所有的所有属性:不能设置宽高,与其他元素并排

dispaly:block有块级元素所有的所有属性:能够设置宽高,不设置宽的话会和父元素宽度的100%,不能并排

display:inline-block在行内的块级元素,能并排,也能设置宽高,不设置宽就会和父元素一致。但他有个缺点,就是中间会产生空隙,产生空隙的原因归于标准文档流的空白折叠现象(可能吧?),我们打代码的时候回打回车符,而回车符被看做一个空白符,占4个像素

产生的问题:可参考**css之display:inline-block布局**

inline-block存在的小问题:

a.上面可以看到用了display:inline-block后,存在间隙问题,间隙为4像素,这个问题产生的原因是换行引起的,因为我们写标签时通常会在标签结束符后顺手打个回车,而回车会产生回车符,回车符相当于空白符,通常情况下,多个连续的空白符会合并成一个空白符,而产生“空白间隙”的真正原因就是这个让我们并不怎么注意的空白符。

**b.**去除空隙的方法:
  1.对父元素添加,{font-size:0},即将字体大小设为0,那么那个空白符也变成0px,从而消除空隙
  现在这种方法已经可以兼容各种浏览器,以前chrome浏览器是不兼容的
图一:
img

**c.**浏览器兼容性:ie6/7是不兼容 display:inline-block的所以要额外处理一下:
  在ie6/7下:
  对于行内元素直接使用{dislplay:inline-block;}
  对于块级元素:需添加{display:inline;zoom:1;}

3.既要设置宽高,又要并排,那就脱离文档流(又或者设置inline-block)生成BFC(可以看成一个蒙版)

BFC

在BFC中,即使不转换块级元素,也能设置宽高了。

(一个浮动的元素),如果没有设置width,那么将自动收缩为内容的宽度(这点非常像行内元素)。

如果不在标准流,比如盒子都浮动了,那么两个盒子之间是没有塌陷现象的。

善于使用父亲的padding,而不是儿子的margin

margin这个属性,本质上描述的是兄弟和兄弟之间的距离; 最好不要用这个marign表达父子之间的距离。

举例如下:

浮动

浮动的高度塌陷

从大佬那偷个图,可以关注一波他的博客和公众号,干货好多:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ayUU9M62-1642158950715)(image-20220110164345858.png)]

清楚浮动

overflow:hidden低版本浏览器会不兼容

边框圆角

单个属性的写法

border-top-left-radius: 60px 120px;        //参数解释:水平半径   垂直半径

border-top-right-radius: 60px 120px;

border-bottom-left-radius: 60px 120px;

border-bottom-right-radius: 60px 120px;

复合写法:

border-radius: 60px/120px;             //参数:水平半径/垂直半径

border-radius: 20px 60px 100px 140px;  //从左上开始,顺时针赋值。如果当前角没有值,取对角的值

border-radius: 20px 60px;

最简洁的写法:(四个角的半径都相同时)

border-radius: 60px;

CSS 动画

补间动画transition,只注重开头和结果,不注重过程,就像flash的不见动画

逐帧动画animation,逐帧绘制动画

补间动画transition

在同一行transition语句中,可以分别指定多个属性,第一个是持续的时间,第二个是属性。

img{
    transition: 1s height, 1s width;
}

还可以是

img{
    transition: 1s 1s(这个是延迟) height ease;
}

是这个东西的简写形式:

img{
    transition-property: height;
    transition-duration: 1s;
    transition-delay: 1s;
    transition-timing-function: ease;
}

并不是所有的属性都支持补间动画

Flex布局

flex的交叉轴就是垂直轴

主轴就是水平轴

flex-warp 就是决定换行

flex-direction 就是主轴的方向

参考:这篇文章中的 Flex 部分

小笔记

百分比

  1. width、height、relative:width相对于父元素的宽;height相对于父元素的高进行计算。relative:top、bottom相对父元素的高;left 、right相对于父元素的宽进行计算。
  2. border-raudis:相对自身标签的宽高设置每个边角的垂直和水平半径。
  3. margin: left、right、top、bottom相当于父元素的宽度进行
  4. absolute:top、bottom相对定位元素的高;left 、right相对于定位元素的宽进行计算。同时位于absolute中的其他属性如width heiht margin等都相当于定位元素进行计算。
  5. line-hight设置内联元素垂直居中时,%相对于文本的行高进行计算,非父元素。

主轴就是水平轴

flex-warp 就是决定换行

flex-direction 就是主轴的方向

参考:这篇文章中的 Flex 部分

小笔记

百分比

  1. width、height、relative:width相对于父元素的宽;height相对于父元素的高进行计算。relative:top、bottom相对父元素的高;left 、right相对于父元素的宽进行计算。
  2. border-raudis:相对自身标签的宽高设置每个边角的垂直和水平半径。
  3. margin: left、right、top、bottom相当于父元素的宽度进行
  4. absolute:top、bottom相对定位元素的高;left 、right相对于定位元素的宽进行计算。同时位于absolute中的其他属性如width heiht margin等都相当于定位元素进行计算。
  5. line-hight设置内联元素垂直居中时,%相对于文本的行高进行计算,非父元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值