当前位置: 首页 > news >正文

前端学习(2)—— CSS详解与使用

目录

一,CSS基础

1.1 语法规范

1.2 引入方式

1.3 选择器

1.3.1 基础选择器

1.3.2 复合选择器

1.3.3 选择器小结

二,CSS使用

2.1 字体设置

2.2 文本属性

2.3 背景属性

2.2 圆角矩形

三,关于浏览器

3.1 Chrome 调试工具 -- 查看 CSS 属性

3.2 块级元素和行内元素 

3.3 盒模型

四,弹性布局

4.1 示例

4.2 flex布局

 4.3 常用属性


 

CSS,层叠样式表 (Cascading Style Sheets),能够对网页中元素位置的排版进行像素精确控制,能够做到页面的样式和结构分离,实现页面梅花的效果(简单来说就是CSS可以控制页面的展示效果,而HTML决定页面结构)

一,CSS基础

1.1 语法规范

基本使用语法为:选择器 + {N条声明}

  • 选择器决定对谁修改
  • 声明决定进行什么修改
  • 声明的属性是键值对,使用“ ; ”区分键值对,使用“ : ”区分键和值,如下例子
<head><style>p {color: red; /*设置字体颜色*/font-size: 40px; /*设置字体大小*/}</style></head><body><p>hello world</p><p>hello 你好</p>

效果如下:

  • CSS 要写到 style 标签中,后面会介绍其它写法
  • style 标签可以放在页面任意位置,一般放到 head 标签内
  • CSS 使用 /* */ 来进行注释 

1.2 引入方式

①内部演示表

 这个就是把CSS 写在 style 标签里,就和上面的例子一样

优点:能够使样式和结构分离

缺点:分离得不够彻底,毕竟是在同一个文件里,当CSS内容过多时容易混乱

②行内样式表

 直接在标签的属性中指定 style 属性,达到单独修改一个标签样式的效果,如下:

这种写法只适合一些简单样式,所以不能写成太复杂的样式 

③外部样式

 这是实际开发中最常用的方式,其方法就是在同一个目录下创建一个css文件,然后使用 link 标签引入 css 文件即可:

首先创建一个 CSStest.css 文件,加入 css 内容:

p {color: red;
}

然后在html文件中使用 link 标签引入即可:

  • 优点: 样式和结构彻底分离了
  • 缺点: 受到浏览器缓存影响, 修改之后 不一定 立刻生效

关于缓存: 这是计算机中一种常见的提升性能的技术手段。网页依赖的资源(图片/CSS/JS等)通常是从服务器上获取的,如果频繁访问该网站,那么这些外部资源就没必要反复从服务器获取,就可以使用缓存先存起来(就是存在本地磁盘上了),从而提高访问效率。可以通过 ctrl + F5 强制刷新页面,强制浏览器重新获取 css 文件

1.3 选择器

1.3.1 基础选择器

①标签选择器

 就是直接把一类标签放在大括号前面,如下:

<style>p{color:greenyellow;}div{color:red;}
</style><p>你好</p>
<p>你好鸭</p>
<td></td>
<div>你好</div>
<div>你好鸭</div>

特点:

  • 能快速为同一类型的标签都选择出来
  • 无法差异化处理

②类选择器

 是对标签选择器的改进,可以差异化不同的标签,也可以让多个相同标签展现不同效果:

<style>.blue{color: blue;}.red{color:red;}
</style><div class="blue">你好</div>
<div class="red">你好鸭</div>

  • 类名用 . 开头的 下方的标签使用 class 属性来调用
  • 一个类名可以被多个标签使用,一个标签也能使用多个类名 (多个类名要使用空格分割,这种做法可以让代码更好的复用)
  • 如果是长的类名,可以使用 - 分割
  • 不要使用纯数字, 或者中文, 以及标签名来命名类名

③id选择器

 具体用法和类选择器类似,如下代码:

<style>#blue{color: green;}#red{color:red;}
</style><div id="blue">你好</div>
<div id="red">你好鸭</div>

  • 使用 # 开头表示 id 选择器,与 html 中某个标签的 id 属性对应
  •  id 是唯一的,不能多个标签不能使用相同 id ,这是和类选择器最大的区别

④通配符选择器

 使用 * 定义,表示选取所有的标签,只在某些特殊情况下使用:

<style>* {color: red;}
</style><p1>你好</p1>
<p2>你好鸭</p2>
<div>你也好鸭</div>

1.3.2 复合选择器

①后代选择器

 又叫包含选择器,选择某个父元素中的某个子元素,如下示例:

<style>/*父元素和子元素要用空格分隔*/ol li{color:red;}
</style><ul> <!--无序列表标签--><li>111</li> <!--列表项标签--><li>222</li><li>333</li>
</ul><ol> <!--有序列表标签--><li>444</li><li>555</li><li>666</li>
</ol>

上面是最简单用法,元素二也可以是孙子元素如下代码:

<style>/*下面两种写法效果一样*/ul li a{color:red;}ul a{color:red;}
</style><ul><li>111</li><li>222</li><li><a href="#">333</a></li>
</ul>

并且后代选择器可以是任意基础选择器的组合(除了通配符选择器)。如下代码:

<style>.hello li a{color:red}.hello #blue{color:blue;}
</style><ol class="hello"><li>111</li><li id="blue">222</li><li><a href="#">333</a></li><li><a href="#">444</a></li>
</ol>

 

②子选择器

子选择器和后代选择器使用类似,使用大于号分割,但是只选中二字,不选中孙子

<style>.hello>a{color:red;}/*如果把大于号换成空格,就是把两个链接都改为了红色*/
</style><ol class="hello"><a href="#">111</a><p><a href="#">222</a></p>
</ol>

                                                  

③并集选择器

用于选择多组标签,使用逗号分隔多个元素表示同时选中,并且任何基础选择器都可以使用并集选择器,不过并集选择器建议竖着写,每个选择器占一行,最后一个选择器不加逗号,如下示例:

假设我们基础html代码为:

<div>苹果</div>
<h4>香蕉</h4>
<ul><li>火龙果</li><li>哈密瓜</li>
</ul>

假设我们要把苹果和香蕉颜色改为红色:

div, h4{color:red;
}

假设我们要把火龙果和哈密瓜也改为红色:

div,
h4,
ul>li {color:red;
}

 

④链接伪类选择器

伪类选择器的作用,是用来定义元素状态的,比如一个超链接默认情况下是蓝色,然后我鼠标移动到上面但是不点击则显示红色,然后我鼠标按下去没有弹起来显示绿色:

<style>a {color: black;}a:hover {color: red;}a:active {color: green;}input {color: blue;}input:hover {color: red;}input:active {color: green;}
</style>
<body><a href="#">你好</a><br><input type="button" value="按钮">
</body>

 

  • a:link 选择未被访问过的链接
  • a:visited 选择已经被访问过的链接
  • a:hover 选择鼠标指针悬停上的链接
  • a:active 选择活动链接(鼠标按下了但是未弹起)

注意:

  • 上面LVHA的顺序是有要求的,加入把 active 放到前面去,那么就会失效
  • 浏览器的a标签都有默认样式,一般实际开发都需要单独制定样式
  • 实际开发主要给链接做一个样式,然后给hover做一个样式即可,另外三个用的不多 

⑤force 伪类选择器

选取获取焦点的 input 表单元素

<style>.hello>input:focus{color:red;}
</style>
<div class="hello"><input type="text"><input type="text"><input type="text"><input type="text">
</div>

1.3.3 选择器小结

选择器种类选择器名称作用特点
基础选择器标签选择器能选出所有相同标签不能差异化选择
类选择器能选出一个或多个标签根据需求选择,最灵活最常用
id 选择器能单独选出一个标签同一个 id 在一个html中只能出现一次
通配符选择器选择所有标签特殊情况下使用
复合选择器后代选择器选择后代元素可以是孙子元素
子选择器选择子元素只能选子元素
并集选择器选择相同样式的元素代码更好的复用
链接伪类选择器选择不同状态的链接一般只用hover
:focuse 伪类选择器选择被选中的元素input:focus

更多的属性可以参考:CSS 参考手册 

二,CSS使用

2.1 字体设置

①字体

  • 字体名称可以用中文,但是不建议
  • 多个字体之间使用逗号分隔(从左到右查找字体,如果都找不到,会使用默认字体)
  • 如果字体名有空格,使用引号包裹
  • 建议使用常见字体,否则兼容性不好

②大小

  • 不同的浏览器默认字号不一样, 最好给一个明确值. (chrome 默认是 16px)
  • 可以给 body 标签使用 font-size
  • 要注意单位 px 不要忘记
  • 标题标签需要单独指定大小

③粗细 

  • 可以使用数字表示粗细
  • 700 == bold, 400 是不变粗, == normal
  • 取值范围是 100 -> 900

④样式 

2.2 文本属性

①颜色

 认识 RGB

  • 我们的显示器是由很多很多的 "像素" 构成的. 每个像素视为一个点, 这个点就能反映出一个具体的颜色.
  • 我们使用 R (red), G (green), B (blue) 的方式表示颜色(色光三原色). 三种颜色按照不同的比例搭配, 就能混合出各种五彩斑斓的效果.
  • 计算机中针对 R, G, B 三个分量, 分别使用一个字节表示(8个比特位, 表示的范围是 0-255, 十六进制表示 为 00-FF).
  • 数值越大, 表示该分量的颜色就越浓. 255, 255, 255 就表示白色; 0, 0, 0 就表示黑色

如下:

②对齐

③装饰

④缩进

  • 单位可以使用 px 或者 em
  • 使用 em 作为单位更好. 1个 em 就是当前元素的文字大小
  • 缩进可以是负的, 表示往左缩进 (可能会导致文字就冒出去了,就像上面图片一样)

⑤行高

行高指的是上下文本行之间的基线距离,html中文字涉及到这几个基准线:顶线,中线,基线,底线

内容区就是底线和顶线包裹的区域,上图的深色区域

行高 = 上边距 + 下边距 + 字体大小 

2.3 背景属性

①颜色

默认是 transparent (透明) 的 

②图片

  • 图片url必须完整,可以是绝对路径或相对路径 

③平铺

④位置

background-position: x y;

参数有三种风格:

  • 方位名词: (top, left, right, bottom)
  • 精确单位: 坐标或者百分比(以左上角为原点)
  • 混合单位: 同时包含方位名词和精确单位

 注意:

  • 如果参数的两个值都是方位名词, 则前后顺序无关. (top left 和 left top 等效)
  • 如果只指定了一个方位名词, 则第二个默认居中. (left 则意味着水平居中, top 意味着垂直居中. )
  • 如果参数是精确值, 则的的第一个肯定是 x , 第二个肯定是 y. (100 200 意味着 x 为 100, y 为 200)
  • 如果参数是精确值, 且只给了一个数值, 则该数值一定是 x 坐标, 另一个默认垂直居中
  • 如果参数是混合单位, 则第一个值一定为 x, 第二个值为 y 坐标. (100 center 表示横坐标为 100, 垂 直居中)

关于坐标系:计算机中的平面坐标系,一般是左上坐标系,和高中数学的右坐标系不同,y是往下延申的,如下图:

⑤尺寸

background-size: length|percentage|cover|contain;
  • 可以填具体的数值: 如 40px 60px 表示宽度为 40px, 高度为 60px
  • 也可以填百分比: 按照父元素的尺寸设置
  • cover: 把背景图像扩展至足够大,以使背景图像完全覆盖背景区域。背景图像的某些部分也许无 法显示在背景定位区域中。
  • contain: 把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域

2.2 圆角矩形

①基本写法

border-radius: length;

length 是内切圆的半径,数值越大,弧线越强烈:

②生成圆形

 直接让border-radius 的值为正方形宽度的半即可

③生成圆角矩形

 让border-radius的值为矩形高度的一半即可:

④展开写法

 border-radius 是一个复合写法,实际可以针对四个角分别设置:

四个变量也可以设置不同值:

三,关于浏览器

下面我们以 Chrome 浏览器来演示 

3.1 Chrome 调试工具 -- 查看 CSS 属性

直接按 F12 或者鼠标右键页面选择检查元素就可以打开 Chrome 网页调试工具:

介绍下上面这一条:

  • elements 查看标签结构
  • console 查看控制台
  • source 查看源码+断点调试
  • network 查看前后端交互过程
  • application 查看浏览器提供的一些扩展功能(本地存储等)
  • Performance, Memory, Security, Lighthouse 暂时不使用, 先不深究

elements 标签页使用:

  • ctrl + 滚轮进行缩放, ctrl + 0 恢复原始大小
  • 使用 左上角箭头可以选中肉燕可见的元素
  • 右侧可以查看当前元素的属性, 包括引入的类
  • 右侧可以修改选中元素的 css 属性. 例如颜色, 可以点击颜色图标, 弹出颜色选择器, 修改颜色. 例如字体大小, 可以使用方向键来微调数值
  • 此处的修改不会影响代码, 刷新就还原了
  • 如果 CSS 样式写错了, 会有提示(黄色感叹号)

3.2 块级元素和行内元素 

CSS中,HTML的标签显示模式有很多,最重要的就是两个:块级元素和行内元素

①块级元素,常见的标签有:h1 - h6、p、div、ul、ol、li ...... 

特点:

  • 独占一行
  • 高度, 宽度, 内外边距, 行高都可以控制
  • 宽度默认是父级元素宽度的 100% (和父元素一样宽)
  • 是一个容器(盒子), 里面可以放行内和块级元素

注意:

  • 文字类的元素内不能使用块级元素
  • p 标签主要用于存放文字,内部不能放块级元素 

②行内元素,又称内联元素,常见标签有:a、strong、b、em、del、span ...... 

特点:

  • 不独占一行, 一行可以显示多个
  • 设置高度, 宽度, 行高无效
  • 左右外边距有效(上下无效). 内边距有效
  • 默认宽度就是本身的内容
  • 行内元素只能容纳文本和其他行内元素, 不能放块级元素

注意:

  • a 标签中不能再放 a 标签 (虽然 chrome 不报错, 但是最好不要这么做)
  • a 标签里可以放块级元素, 但是更建议先把 a 转换成块级元素

③二者区别 

  • 块级元素独占一行, 行内元素不独占一行
  • 块级元素可以设置宽高, 行内元素不能设置宽高
  • 块级元素四个方向都能设置内外边距, 行内元素不能设置垂直方向

④改变显示模式 

使用display 属性可以修改元素的显示模式,可以把 div 等变成行内元素,也可以把a,span等变成块级元素:

  • display: block 改成块级元素 (常用)
  • display: inline 改成行内元素 (不常用)
  • display: inline-block 改成行内块元素

3.3 盒模型

每一个html元素都相当于是一个矩形的“盒子”,该盒子由四部分组成:

  • 边框 border
  • 内容 content
  • 内边距 padding
  • 外边距 margin

①边框

 有三种属性:

  • 粗细: border-width
  • 样式: border-style,默认没边框。solid 实线边框 dashed 虚线边框 dotted 点线边框
  • 颜色: border-color

支持简写,并且没有顺序要求:

border: 1px solid red;

也可以单独改变四个方向的任意边框:

border-top/bottom/left/right

注意:

边框会撑大盒子,如下示例:

我们定义和盒子是250x250,但是加了我们的边框后,变成了270x270 

有时候我们不想盒子被撑大,那么我们可以使用 box-sizing 属性,它可以修改浏览器的行为,使边框不再撑大盒子:

②内边距

默认盒子的内容是盯着边框来显示的,可以使用 padding 来控制这个距离,也都可以给top、bottom、left、right四个方向都加上边距:

可以看到padding也会撑大盒子,所以也可以用bos-sizing属性来让浏览器不要撑大盒子 

可以把多个padding 合并到一起,并且这四种方式都很常见

padding: 5px; /*四个方向都是 5px*/
padding: 5px 10px; /*上下内边距 5px, 左右内边距为 10px*/
padding: 5px 10px 20px; /*上边距 5px, 左右内边距为 10px, 下内边距为 20px*/
padding: 5px 10px 20px 30px; /*上5px, 右10px, 下20px, 左30px (顺时针)*/

③外边距

 外边距主要负责控制盒子和盒子之间的距离,也可以给四个方向都加上边距,如下示例:

复写规则同padding:

margin: 10px; /*四个方向都设置*/
margin: 10px 20px; /*上下为 10, 左右 20*/
margin: 10px 20px 30px; /*上 10, 左右 20, 下 30*/
margin: 10px 20px 30px 40px; /*上 10, 右 20, 下 30, 左 40*/

④去除浏览器默认样式  

浏览器会给元素加上一些默认的样式,尤其是内外边距,不同浏览器的默认样式存在差别

为了保证代码在不同的浏览器上都能按照统一的样式显示,往往我们会去除浏览器默认样式

使用通配符选择器即可完成这件事情

*{marign: 0;padding: 0;
}

四,弹性布局

4.1 示例

先看下面的示例:

当我们给 #one 加上 display:flex 之后:

可以看到,span的有了高度,不再是“行内元素”了

再给 div 加上 justify-content: space-around ,此时效果为:

span被水平分开了

然后再把上面的space-around改为 flex-end,可以看到三个元素再最右侧显示了:

4.2 flex布局

flex 是 flexible box 的缩写,意思是“弹性盒子”,任何一个 html 元素,都可以指定为 display:flex 完成弹性布局

flex 布局的本质是给父盒子添加 display:flex 属性,来控制盒子的位置和排列方式

基础概念

  • 被设置为 display:flex 属性的元素, 称为 flex container
  • 它的所有子元素立刻称为了该容器的成员, 称为 flex item
  • flex item 可以纵向排列, 也可以横向排列, 称为 flex direction(主轴)
  • 当父元素设置为 display: flex 之后,子元素的 float,clear,vertical-align 都会失效

 4.3 常用属性

①justify-content,就是上面 4.1 示例里的那个

属性取值如下表:

取值作用
flex-start默认值,使盒子位于容器开头
flex-end使盒子位于容器的结尾
center使盒子位于容器中央
space-between使盒子在行与行之间留有间隔
space-around使项目在行之前、行之间和行之后都留有空间

 未指定 justify-content 时,默认按照从左到右的方向布局:

指定 flex-end 时,元素都排列到右侧:

指定为center后,元素居中排列,指定为space-around时五个绿方框平方排列,如4.1示例 

设置space-between时,会先两元素贴近边缘,再平方剩余空间:

②align-items

这个是设置侧轴上的元素排列方式,在上面的示例里我们是让元素按照主轴也就是水平的方向排列,同理我们也可以让元素按照侧轴也就输竖直方向排列

取值作用
stretch默认值。行拉伸以占据剩余空间
center朝着弹性容器的中央对行打包
flex-start朝着弹性容器的开头对行打包
flex-end朝着弹性容器的结尾进行打包
space-between行均匀分布在弹性容器中
space-around行均匀分布在弹性容器中,两端各占一半

默认值是 stretch,意思是如果子元素没有指定高度,就会填满父元素的高度,比如下面的示例中span只指定了width,没有指定height:

可以使用align-items 实现垂直居中:

注意:align-items 只能针对单行元素来实现,如果有多行元素,就需要使用 item-contents 

相关文章:

  • 如何在 CentOS 7 虚拟机上配置静态 IP 地址并保持重启后 SSH 连接
  • OpenHarmony平台驱动开发(十五),SDIO
  • Android中LinearLayout线性布局使用详解
  • 块设备代码分析
  • SpringBoot中使用集群版Redis
  • 【一次成功!】Ubuntu22.04安装cartographer
  • 力扣HOT100之二叉树:543. 二叉树的直径
  • 湖南大学3D场景问答最新综述!3D-SQA:3D场景问答助力具身智能场景理解
  • PAC文件:智能代理配置的瑞士军刀
  • 机器学习 --- 数据集
  • 【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一)
  • 解锁课程编辑器之独特风姿
  • Java线程池性能优化全解析:从配置到实践
  • 合肥SMT贴片加工核心优势与工艺升级
  • 2025java面试题整理
  • 目标检测任务常用脚本1——将YOLO格式的数据集转换成VOC格式的数据集
  • maven中relativepath标签的含义及使用方法
  • OpenAI Text 模型与 Chat 模型调用实战指南:从基础配置到创意花店命名
  • 24年面试问题总结记录
  • RabbitMQ 核心概念与消息模型深度解析(二)
  • 美凯龙:董事兼总经理车建兴被立案调查并留置
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 人才争夺战,二三线城市和一线城市拼什么?洛阳官方调研剖析
  • 美股全线收涨:道指涨逾千点,纳斯达克中国金龙指数涨5.4%
  • 央行等印发《关于金融支持广州南沙深化面向世界的粤港澳全面合作的意见》
  • 季后赛主场优势消失之谜,这事竟然要赖库里