CSS学习笔记

CSS主要是对HTML标记的内容进行更加丰富的装饰,并将网页表现样式与网页结构分离的一种样式设计语言。可以使用CSS控制HTM页面中的文本内容、图片外形以及版面布局等外观的显示样式。本文记录了CSS学习过程中的一些常用的、重要的知识点。

样式引入

行内样式

<标签名 style = “属性1:属性值1;属性2:属性值2;属性3:属性值3;”>内容</标签名>

内部样式

外部样式

复合选择器

  • div p {}    后代选择器
  • div>p {}    子元素选择器
  • ul,p {}    并集选择器
  • a:hover {}    带有:的伪类选择器

 

伪类选择器

  • a:link    选择未被点击过的链接
  • a:visited    选择已被访问过的链接
  • a:hover    选择鼠标指针位于其上的链接
  • a:active    选择鼠标按下未弹起的链接

注意:以上需要按照lvha的顺序编写。

  • input:focus    选择获得焦点的表单元素

字体属性

  • font-famliy: 设置字体,可以多个字体,常用于body
  • font-size: 设置字体大小
  • font-weight: 设置字体粗细
  • font-style: 设置字体样式

文本属性

  • color: 设置文本颜色
  • text-align: 设置水平对齐方式
  • text-decoration: 添加文本修饰,常用none来取消a标签下划线
  • text-indent: 常用于设置首行缩进2字符(2em)
  • text-shadow: 设置文字阴影
  • line-height: 设置行间距,块级元素下行间距设置为盒子高度可实现垂直居中
  • verticl-align: middle    实现文字和图片中线对齐,也可以解决图片底部的空隙问题
  • white-space: nowrap    强制文本一行显示

背景属性

  • background-color: 设置背景颜色
  • background-image: url(*.png) 设置背景图片
  • background-repeat: 设置背景平铺方式
  • background-position: x y 设置图片位置
  • background-attachment: 背景图像固定
  • background:rgba(0, 0, 0, 0.3) 背景颜色半透明

块级元素/行内元素/行内块元素

行内元素

特点:就可以和其他元素在一行显示,不能自动换行,不能设置宽高。

常见行内元素:a,span,i,u,em,sub,sup…

块级元素

特点:不可以和他的元素在一行,可以自动换行,可以设置宽高。

常见的块级元素:div,p,h,ul,li,dl,dt,dd…

行内块级元素

特点:可以和其他元素保持在一行,还能设置宽高。

常见元素:textarea,input,img,button…

转换

  • display: block    行内元素转快元素
  • display: inline    块元素转行内元素
  • display: inline-block    转换为行内块元素

行内元素和行内块元素可以给其父级添加text-align: center来实现水平居中。

CSS权重

继承/*(0.0.0.0) < 元素选择器(0.0.0.1) < 类/伪类选择器(0.0.1.0) < id选择器(0.1.0.0) < 行内样式(1.0.0.0) < !important(无穷大)

复合选择器的权重叠加问题:

li权重为0.0.0.1

ul li 权重为0.0.0.1 + 0.0.0.1= 0.0.0.2

.nav ul li权重为 0.0.1.0 + 0.0.0.1 + 0.0.0.1 = 0.0.1.2

注意:权重不会产生进位,即11个li相加的权重(0.0.0.11),依旧低于类/伪类的权重(0.0.1.0)。

盒子模型

网页布局本质:利用CSS摆放盒子模型。

属性

  • border-width: 设置边框宽度
  • border-style: 设置边框样式
  • border-color: 设置边框颜色
  • border-collapse: 表格合并边框
  • border-radius 设置边框圆角
  • padding: 设置内边距,调整内容与边框的距离
  • margin: 设置外边距,调整盒子与盒子之间的距离
  • box-shadow: 设置盒子阴影

相关问题

1.在指定了盒子宽/高的情况下,padding和border都会将盒子撑大,可以利用padding特性制作导航栏。

2.margin左右设置为auto可以实现水平居中(盒子必须指定了宽度)。

3.相邻块级元素垂直外边距合并问题:取外边距最大的一个,另一个无效。

4.嵌套块元素垂直外边距的塌陷问题:父元素设置有100px上边距,嵌套子元素也设置100px上边距,会导致父元素上边距变为200px。

解决方案:

①为父元素添加边框,边框可以设置为透明。

②可以为父元素定义内边距。

③为父级元素添加overflow: hidden。

5.脱标的元素不会触发3、4的问题。

6.很多元素自带默认内外边距,进行布局前需要进行清理:* {padding: 0px; margin: 0px;}。

7.行内元素为了照顾兼容性问题,尽量只设置左右内外边距,不要设置上下内外边距,可以转换为块级元素或者行内块元素再进行设置

CSS浮动

网页布局第一准则:多个块级元素纵向排列标准流,多个块级元素横向排列用浮动。

浮动元素经常搭配标准流的父级来使用:先采用标准流的父级排列上下位置,之后内部子元素采取浮动排列左右位置。请继续关注飞鱼ACG,后续我们将更新更多实用教程。

float: 设置浮动

浮动特性

1.浮动元素会脱离标准流(脱标)

浮动元素不再保留原先位置,原先位置被后面的标准流元素所占有。浮动盒子只影响后面的标准流,不会影响前面的标准流。

浮动元素只会压住它下面标准流的盒子,不会压住标准流盒子里的文字因为浮动最初产生的目的就是为了做文字环绕效果的。

2.浮动元素会一行内显示,并且元素顶部对齐

浮动元素会紧贴在一起,不会有缝隙,如果父级元素装不下这些浮动的盒子,那么多出来的盒子会另起一行对其。

3.浮动元素会具有行内块元素的特点

行内元素添加浮动,可以直接设置宽高。

块级元素没有设置宽度,默认和父级一样宽,但是添加浮动之后,他的默认大小会根据内容来决定。

清除浮动

理想情况下,我们不指定父级元素高度,希望子级元素撑开父级元素,此时浮动会造成父级元素高度为0,对其他元素造成影响,所以我们需要清除浮动。清除浮动实际采取的策略是闭合浮动,常用代码clear:both。

1.额外标签法(W3C推荐做法,但是实际不常用)

这种方法就是向父容器的末尾再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器。这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)块级元素标签。

<div style=”clear:both;”></div>

或者使用

<br style=”clear:both;” />

2.给父级添加overflow属性

将overflow的值设置为hidden或者auto,常用hidden。

不过使用overflow的时候,可能会对页面表现带来影响,而且这种影响是不确定的,你最好是能在多个浏览器上测试你的页面

3.给父元素添加:after伪元素

.clearfix:after {
    content: ".";
    height: 0;
    visibility: hidden;
    display: block;
    clear: both;
    }
.clearfix {
    *zoom: 1;
    /*兼容IE6、7*/
    }

4.双伪元素标签法(推荐)

.clearfix :before,
.clearfix:after {
    content: "";
    display: table;
}
    
.clearfix:after {
    clear: both;
}
    
.clearfix {
    zoom: 1;
    /*兼容IE6、7*/
}

CSS属性书写顺序

建议按以下顺序书写:

1.位置属性(position, top, right, z-index, display, float等)

2.大小(width, height, padding, margin)

3.文字系列(font, line-height, letter-spacing, color- text-align等)

4.背景(background, border等)

5.其他(animation, transition等)

CSS定位

定位 = 定位模式 + 边偏移

子级使用绝对定位,则父级需要使用相对定位

边偏移: top/ bottom/ left/ right

定位模式

position: static(静态定位)

元素默认定位,也就是无定位的意思。静态定位按照标准流特性摆放位置,没有边偏移。使用较少

position: relative(相对定位)

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。

1.原来的标准流位置继续占有,后面的盒子仍以标准流的方式对它。(不脱标)

2.典型应用是给absolute(绝对定位)当爹的。

position: absolute(绝对定位)

绝对定位是元素在移动位置的时候,是相对于他的祖先元素来说的。

1.如果没有祖先元素或祖先元素没有定位,则以浏览器为基准。

2.如果祖先元素有定位(相对,绝对,固定),则以最近一级有定位的祖先元素为基准。

3.绝对定位不再占有原先的位置。(脱标)

position: fixed(固定定位)

以浏览器可视窗口来进行定位,跟父元素没有任何关系,不受滚动条影响,不占有原先位置(脱标)。

定位小技巧(固定在版心右侧):先left:50%到中间,再通过margin-left移动版心宽度的一般。

position: sticky(粘性定位)

以浏览器可视窗口来进行定位,粘性定位占有原先位置,必须添加top,left,right,bottom其中一个才有效。

定位叠放次序(控制z轴): z-index

它规定谁上谁下,数值可以是正数、负数、0,数值越大越靠上,如果数值相同,则按照顺序后来居上,只有定位的盒子才能使用。

定位的特殊特性

1.行内元素添加绝对或固定定位,可以直接设置宽度和高度。

2.块级元素添加绝对或固定定位,如果不设置宽度和高度,默认大小会根据内容来决定。

3.脱标的元素都不会触发外边距合并问题。

4.绝对定位和固定定位会完全压住下面的标准流。

元素的显示与隐藏

  • display: none    隐藏元素,并且不占有原来的位置
  • display: block    除了转换为块级元素之外,还有显示元素的意思
  • visinility: hidden    元素隐藏,继续占有原来的位置
  • visibility: visible    元素可见
  • overflow: hidden    隐藏溢出部分
  • overflow: visible    元素可见
  • overflow: scroll    显示滚动条(总是)
  • overflow: auto      显示滚动条(有溢出才显示)
  • text-overflow: ellipsis    溢出文字省略号显示

多行文本溢出显示

overflow : hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;

精灵图

原理:将多个小图片整合到一张大图里,打开网页的时候只需要向服务器请求一次。

目的:减少服务器接收和发送的请求次数,提高页面加载速度。

通过background-position来确定图片显示位置,使用精灵图需要精确测量小图片大小和所在位置。

字体图标

字体图标:一种高效的图标使用方式,展示的是图标,本质属于字体。

使用步骤:

1.图标下载:https://icomoon.io/      https://www.iconfont.cn/

2.下载完成之后,复制字体文件夹到工作目录

3.复制下载文件里的CSS样式引入

4.打开下载文件的html,选择图标后面的□,复制粘贴进自己的html

CSS三角

创建一个盒子,宽高为0,设置四个边框为10px透明色,然后把其中一个改成其他颜色,就会形成三角形。

三角形的大小取决于边框的大小。

.triangle {
    width: 0;
    height: 0;
    border: 50px solid transparent;
    border-top-color: black;
    /*照顾兼容性*/
    line-height: 0px;
    font-size: 0px;
}

过渡与动画(animation)

过渡的使用

可以时间过渡动画,谁做过渡给谁加,经常搭配: hover使用

transition: 过渡属性 话费时间 运动曲线 何时开始

动画的使用

@keyframes 动画名称 {
    0%   {top:0px;}
    25%  {top:200px;}
    50%  {top:100px;}
    75%  {top:200px;}
    100% {top:0px;}
}

animation-name: 动画名称

animation-duration: 时间

animation-timing-function:    速度曲线

animation-fill-mode: 结束状态

2D转换与3D转换

2D转换

transform: translate(x,y)    移动位置

特点:移动位置不影响其他元素,位置百分比相当于自身宽高的百分比,对行内标签没有效果

transform: rotate(*deg)    旋转

transform-origin: x y    设置旋转中心点

单位deg,角度为正,顺时针,角度为负,逆时针,默认旋转中心点为元素中心点。

transform: scale(x,y)    设置缩放,不会影响其他盒子

3D转换

transform: translate3d(x,y,z)  3D移动

transform: rotate3d(x,y,z,deg)

perspective:    3D透视,透视写在被观察物体父盒子上

transform-style: preserve-3d    子元素开启3d,默认为flat不开启,代码写在父盒子

移动端布局

CSS3盒子模型:
box-sizing: border-box;
-webkit-box-sizing: border-box;

点击高亮我们需要清除 设置为transparent 完成透明
-webkit-tap-highlight-color: transparent;

在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式
-webkit-appearance: none;

禁用长按页面时的弹出菜单
img,a { -webkit-touch-callout: none; }

流式布局(百分比布局)

max-width: 最大宽度
min-width: 最小宽度

flex布局

常见父项属性

flex-direction: 设置主轴方向

默认x轴为主轴,元素跟着主轴方向来进行排列

justify-conten: 设置主轴上的子元素排列方式

flex-wrap: 设置子元素是否换行

align-items: 设置侧轴上的子元素排列方式(单行)

align-content: 设置侧轴上的子元素的排列方式(多行)

flex-flow: 是flex-direction和flex-wrap的复合属性

常见子项属性

flex: 子项目占的份数
align-self: 控制子项自己在侧轴的排列方式
order:定义子项的排列顺序(前后顺序)

响应式布局

媒体查询

未完待续……

给TA打赏
共{{data.count}}人
人已打赏
教程

为Wordpress添加时间轴

2020-7-4 19:35:35

教程

Git学习笔记

2020-8-12 22:20:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索