CSS 语法规范
使用 HTML 时,需要遵从一定的规范,CSS 也是如此。要想熟练地使用 CSS 对网页进行修饰,首先需要了解CSS 样式规则。
CSS 规则由两个主要的部分构成:选择器以及一条或多条声明。
所有的样式包含在 <style>标签内,表示是样式表。<style> 一般写到 </head> 中
<head> <style> h4 { color: blue; font-size: 100px; } </style></head>
CSS 的注释
注释用于解释代码,它们会被浏览器忽略。CSS 中的注释以“ /* ”开头,以“ */ ”结尾。
/* 需要注释的内容 */
CSS 代码风格
1. 样式格式书写 1.紧凑格式 × h3 { color: deeppink;font-size: 20px;} 2.展开格式 √ h3 { color: pink; font-size: 20px; }强烈推荐第二种格式, 因为更直观。2. 样式大小写风格 1.小写格式√ h3 { color: pink; } 2.大写格式× H3 { COLOR: PINK; }强烈推荐样式选择器,属性名,属性值关键字全部使用小写字母,特殊情况除外。3. 样式空格风格 h3 { color: pink; }属性值前面,冒号后面,保留一个空格选择器(标签)和大括号中间保留空格
基础选择器又包括:标签选择器、类选择器、id 选择器和通配符选择器
标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。
语法:
标签选择器{ 属性:属性值 ... }
标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。
如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器.
语法:
.类名 { 属性1: 属性值1; ... }
<div class="类名"> 变红色 </div>
我们可以给一个标签指定多个类名,从而达到更多的选择目的。 这些类名都可以选出这个标签.简单理解就是一个标签有多个名字.
<div class="red font20">刻晴</div>
#id名 { 属性1: 属性值1; ... }
<div id="id名">内容</div>
* { 属性1: 属性值1; ... }/*通配符选择器不需要调用, 自动就给所有的元素使用样式*/ /*清除所有的元素标签的内外边距*/ * { margin: 0; padding: 0; }
属性 | 表示 | 注意点 |
font-size | 字号 | 我们通常用的单位是 px 像素,一定要跟上单位。 |
font-family | 字体 | 实际工作中按照团队约定来写字体。 |
font-weight | 字体粗细 | 记住加粗是 700 或者 bold,不加粗是 normal 或者 400,记住数字不要跟单位。 |
font-style | 字体样式 | 记住倾斜是 italic,不倾斜是 normal,工作中我们最常用 normal。 |
font | 字体连写 | 1.字体连写是有顺序的不能随意换位置。2.其中字号和字体必须同时出现。 |
字体系列
CSS 使用 font-family 属性定义文本的字体系列。
p { font-family:"微软雅黑";} div {font-family: Arial,"Microsoft Yahei", "微软雅黑";}/*可以同时指定多个字体,中间以逗号隔开,表示如果浏览器不支持第一个字体,则会尝试下一个,直到找到合适的字体*/
字体大小
CSS 使用 font-size 属性定义字体大小。
p { font-size: 20px; }
字体粗细
CSS 使用 font-weight 属性设置文本字体的粗细。
p { font-weight: bold; }
属性值 | 描述 |
normal | 默认值(不加粗的)。 |
bold | 定义粗体(加粗的)。 |
100 - 900 | 400 等同于 normal,而 700 等同于 bold。注意这个数字后面不跟单位。 |
字体样式
CSS 使用 font-style 属性设置文本的风格。
p { font-style: normal; }
属性值 | 作用 |
normal | 默认值,浏览器会显示标准的字体样式font-style:normal;。 |
italic | 浏览器会显示斜体的字体样式。 |
字体的综合写法
字体属性font可以把以上文字样式综合来写, 这样可以更节约代码:
body { font: font-style font-weight font-size[/line-height] font-family;}
属性 | 表示 | 注意点 |
color | 文本颜色 | 我们通常用十六进制比如而且是简写形式#fff。 |
text-align | 文本对齐 | 可以设定文字水平的对齐方式。 |
text-indent | 文本缩进 | 通常我们用于段落首行缩进 2 个字的距离text-indent:2em;。 |
text-decoration | 文本修饰 | 记住添加下划线underline,取消下划线none。 |
line-height | 行高 | 控制行与行之间的距离。 |
letter-spacing | 字间距 | 用法示例letter-spacing:2px |
word-spacing | 单词间距 | 用法示例word-spacing:10px |
color | 颜色半透明(css3) | 用法示例color:rgba(r,g,b,a) |
text-shadow | 文字阴影(css3) | text-shadow:水平距离 垂直距离 模糊距离 阴影颜色 |
文本颜色
color 属性用于定义文本的颜色。
div { color: red;}
表示 | 属性值 |
预定义的颜色值 | red, green, blue, pink... |
十六进制(开发常用) | #FF0000, #FF6600, #29D794 #ffffff 简化为 #fff .... |
RGB 代码 | rgb(255,0,0)或 rgb(100%,0%,0%) |
文本对齐
text-align 属性用于设置元素内文本内容的水平对齐方式
div { text-align: center; }
属性值 | 解释 |
left | 左对齐(默认值) |
right | 右对齐 |
center | 居中对齐 |
justify | 两端对齐 |
修饰文本
div { text-decoration:underline; }
属性值 | 描述 |
none | 默认。没有装饰线(最常用)。 |
underline | 下划线。链接 a 自带下划线(常用)。 |
overline | 上划线。(几乎不用)。 |
line-through | 删除线。(不常用)。 |
类似的:列表去掉前面小圆点
li { list-style: none;}
文本缩进
text-indent 属性用来指定文本的第一行的缩进,通常是将段落的首行缩进
div { text-indent:20px; } div { text-indent:2em; }/*em 是一个相对单位,就是当前元素(font-size) 1 个文字的大小, 如果当前元素没有设置大小,则会按照父元素的 1 个文字大小。*/
行间距
line-height 属性用于设置行间的距离(行高)。可以控制文字行与行之间的距离
p { line-height: 26px; }
行高的文本分为: 上间距+文本高度+下间距 = 行间距
按照 CSS 样式书写的位置(或者引入的方式),CSS 样式表可以分为三大类:
样式表总结 | 优点 | 缺点 | 使用情况 | 控制范围 |
行内样式表(行内式) | 书写方便,权重高。 | 结构样式混写。 | 较少 | 控制一个标签。 |
内部样式表(嵌入式) | 部分结构和样式相分离。 | 没有彻底分离。 | 较多 | 控制一个页面。 |
外部样式表(链接式) | 完全实现结构和样式相分离。 | 需要引入。 | 最多 | 控制多个页面。 |
行内样式表(内联样式表)是在元素标签内部的 style 属性中设定 CSS 样式。适合于修改简单样式.
<div style="color: red; font-size: 12px;"> 问君能有几多愁,恰似一群太监上青楼。 </div>
内部样式表(内嵌样式表)是写到html页面内部. 是将所有的 CSS 代码抽取出来,单独放到一个 <style> 标签中
<style> div { color: red; font-size: 12px; } </style>
实际开发都是外部样式表. 适合于样式比较多的情况. 核心是:样式单独写到CSS 文件中,之后把CSS文件引入到 HTML 页面中使用.
<link rel="stylesheet" type="text/css" href="css文件路径">
link属性 | 作用 |
rel | 定义当前文档与被链接文档之间的关系,在这里需要指定为“stylesheet”,表示被链接的文档是一个样式表文件。 |
href | 定义所链接外部样式表文件的 URL,可以是相对路径,也可以是绝对路径。 |
type | 定义所链接文档的类型,在这里需要指定为"text/css",表示链接的外部文件为css样式表。 |
Chrome 浏览器提供了一个非常好用的调试工具,可以用来调试我们的 HTML 结构和 CSS 样式。
打开 Chrome 浏览器,按下 F12 键或者右击页面空白处-->检查。
CSS 基本采取简写形式即可.
在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。
后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。
语法:
元素1 元素2 { 样式声明 }div a {color:red;}
上述语法表示选择元素 1 里面的所有元素 2 (后代元素)。
语法说明:
子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。简单理解就是选亲儿子元素
语法:
元素1 > 元素2 { 样式声明 }div>a {color:red;}
语法说明:
定义:
语法:
元素1,元素2 { 样式声明 }
上述语法表示选择元素1 和 元素2。
语法说明:
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <title></title> <style type="text/css"> p.special-text { color: blue; } .special-text1.special-text2#ids { color: red; } </style></head><body> <p class="special-text">这是一个段落。</p> <p>这是另一个段落。</p> <p class="special-text1 special-text2" id="ids">这是一个段落</p></body></html>
链接伪类选择器
书写顺序:
/*链接伪类选择器实际工作开发中的写法示例*//* a 是标签选择器 所有的链接 */ a { color: gray; } /* :hover 是链接伪类选择器 鼠标经过 */ a:hover { color: red; /* 鼠标经过的时候,由原来的 灰色 变成了红色 */ }
表单伪类选择器
示例:
input:focus { background-color:yellow;}
目标伪类选择器
格式:
:target{ color:red; ...}
示例:
<!DOCTYPE html><html lang = "en"><head> <meta charset="utf-8"> <title>选择器</title> <style type="text/css"> :target{ color:red; font-size: 30px; } </style></head><body> <a href="#four">最喜欢的角色</a> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <ul> <li>钟离</li> <li>甘雨</li> <li>纳西妲</li> <li id = "four">刻晴</li> <li>菲谢尔</li> <li>万叶</li> <li>班尼特</li> </ul> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></body></html>
结构伪类选择器
示例:
li:nth-child(even) { background-color: gray;}/*选择父元素,也就是ul元素的第偶数位置的子元素*/
选择器 | 作用 | 特征 | 使用情况 | 隔开符号及用法 |
后代选择器 | 用来选择后代元素 | 可以是子孙后代 | 较多 | 符号是空格,如.nav a |
子代选择器 | 选择最近一级元素 | 只选亲儿子 | 较少 | 符号是大于,如.nav>p |
并集选择器 | 选择某些相同样式的元素 | 可以用于集体声明 | 较多 | 符号是逗号,如.nav,.header |
交集选择器 | 多个选择器进行选择 | |||
链接伪类选择器 | 选择不同状态的链接 | 跟链接相关 | 较多 | a:hover |
表单伪类选择器 | 选择获得光标的表单 | 跟表单相关 | 较少 | input:focus |
结构伪类选择器 | 选择父元素的某些子元素 | 列表li常用 | 较多 | :first-child :nth-child(n) |
常见的块元素:
<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li> <div> 标签是最典型的块元素。
块级元素的特点:
注意:
常见的行内元素(内联元素):
<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span><span> 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。
行内元素的特点:
注意:
/*<a> 转换一下块级模式最安全*/a { display: block;}
常见的行内块标签:
<img />、<input />、<td>
行内块元素的特点:
学习元素显示模式的主要目的就是分清它们各自的特点,当我们网页布局的时候,在合适的地方用合适的标签元素。
元素模式 | 元素排列 | 设置样式 | 默认宽度 | 包含 |
块级元素 | 一行只能放一个块级元素 | 可以设置宽度、高度 | 容器的 100% | 容器级可以包含任何标签 |
行内元素 | 一行可以放多个行内元素 | 不可以直接设置宽度、高度 | 它本身内容的宽度 | 容纳文本或其他行内元素 |
行内块元素 | 一行放多个行内块元素 | 可以设置宽度和高度 | 它本身内容的宽度 |
转换方式
解决方案: 让文字的行高等于盒子的高度 就可以让文字在当前盒子内垂直居中
通过 CSS 背景属性,可以给页面元素添加背景样式。 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。
样式名称:background-color 定义元素的背景颜色
使用方式:
background-color:颜色值;
元素背景颜色默认值是 transparent(透明),我们也可以手动指定背景颜色为透明色
background-color:transparent;
样式名称:background-image 定义元素的背景图片
使用方式:
background-image : none | url(URL)/*URL 既可以使用单引号,也可以使用双引号,还可以不使用引号直接写 URL,但不使用引号时 URL 中不能包含特殊字符和空格等。*//*示例*/.container { background-image: url('./your-image-url.jpg');}
参数值 | 作用 |
none | 无背景图(默认的)。 |
url(URL) | 使用绝对或相对地址指定背景图像。 |
样式名称:background-repeat 设置元素背景图像的平铺
background-repeat: repeat | no-repeat | repeat-x | repeat-y
参数值 | 作用 |
repeat | 背景图像在纵向和横向上平铺(默认的)。 |
no-repeat | 背景图像不平铺。 |
repeat-x | 背景图像在横向上平铺。 |
repeat-y | 背景图像在纵向平铺。 |
样式名称:background-position 属性可以改变图片在背景中的位置
background-position: x y;background-position:left|center|right top|center|bottom ;/*参数是方位名词*/ /*如果指定的两个值都是方位名词,则两个值前后顺序无关,比如 left top 和 top left 效果一致*/ /*如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐*//*参数是精确单位*/ /*如果参数值是精确坐标,那么第一个肯定是 x 坐标,第二个一定是 y 坐标*/ /*如果只指定一个数值,那该数值一定是 x 坐标,另一个默认垂直居中*//*参数是混合单位*/ /*如果指定的两个值是精确单位和方位名词混合使用,则第一个值是 x 坐标,第二个值是 y 坐标*/
参数值 | 说明 |
length | 百分数、由浮点数字和单位标识符组成的长度值。 |
position | top、center、bottom、left、center、right方位名词。 |
样式名称:background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动。
background-attachment : scroll | fixed
参数 | 作用 |
scroll | 背景图像是随对象内容滚动。 |
fixed | 背景图像固定。 |
背景合写样式:
background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;background: transparent url(image.jpg) repeat-y fixed top ;
多背景图片
background: url(test1.jpg) no-repeat left top, url(test2.jpg) no-repeat right bottom #aaa;
CSS3 提供了背景颜色半透明的效果。
background-color: rgba(0, 0, 0, 0.3);
属性值 | 作用 |
[<length> | <percentage> | auto ]{1,2} | 长度,百分比,自动中选取一个或任选两个,选取一个,图像比例不变,选取两个分别控制x轴y轴 |
<length>用长度值指定背景图像大小。不允许负值 | |
<percentage>用百分比指定背景图像大小。不允许负值。 | |
auto背景图像的真实大小 | |
cover | 将背景图像等比缩放到完全覆盖容器,背景图像有可能超出容器 |
contain | 将背景图像等比缩放到宽度或高度与容器的宽度或高度相等,背景图像始终被包含在容器 |
属性 | 作用 | 值 |
background-color | 背景颜色 | 预定义的颜色值/十六进制/RGB 代码 |
background-image | 背景图片 | url(图片路径) |
background-repeat | 是否平铺 | repeat/no-repeat/repeat-x/repeat-y |
background-position | 背景位置 | length/position 分别是 x 和 y 坐标 |
background-attachment | 背景附着 | scroll(背景滚动)/fixed(背景固定) |
background | 书写更简单 | 背景颜色、背景图片地址、背景平铺、背景滚动、背景位置; |
background-color | 背景颜色半透明 | background: rgba(0,0,0,0.3);后面必须是 4 个值 |
background-size | 背景缩放 | [ <length> | <percentage> | auto ]{1,2}或cover 或contain |
CSS 的层叠性是指当多个 CSS 规则应用于同一个 HTML 元素时,这些规则会根据一定的优先级进行叠加,最终决定元素的样式表现
层叠性原则:
div{ color:red; font-size:18px;}div{ color:green;}/*颜色层叠掉了,最终为绿色*//*div的字体字号仍为18px*/
CSS中的继承: 子标签会继承父标签的某些样式,如文本颜色和字号。
恰当地使用继承可以简化代码,降低 CSS 样式的复杂性。
<!DOCTYPE html><html><head> <style type="text/css"> div { color: red; font-size: 18px; } </style></head><body> <div> <p>文本颜色</p> <!-- 由于css的继承性,p标签样式继承父元素div标签的样式--> </div></body></html>
可继承的属性:
行高的继承性:
body { font:12px/1.5 Microsoft YaHei; }/*或*/ body { line-height: 1.5; }
当同一个元素指定多个选择器,就会有优先级的产生。
选择器优先级计算表格
选择器 | 选择器权重 |
继承或者*通配符选择器 | 0,0,0,0 |
元素选择器 | 0,0,0,1 |
类选择器、伪类选择器 | 0,0,1,0 |
ID 选择器 | 0,1,0,0 |
行内样式 style="" | 1,0,0,0 |
!important 重要的 | 无穷大 |
优先级注意点
权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重。
网页布局的核心本质: 就是利用 CSS 摆盒子。
网页布局过程:
盒子模型(Box Model):把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容
盒子模型主要由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。
边框的使用
border : border-width || border-style || border-color;
属性 | 作用 |
border-width | 定义边框粗细,单位是 px。 |
border-style | 边框的样式。 |
border-color | 边框颜色。 |
边框样式 border-style 可以设置如下值:
边框的合写与分写
/*合写*/border: 1px solid red; /*分写*/border-top: 1px solid red; border-bottom: 1px solid red; border-right: 1px solid red; border-left: 1px solid red;
表格的细线边框
border-collapse:collapse;
边框会影响盒子实际大小
边框会额外增加盒子的实际大小。因此我们有两种方案解决:
内边距的使用方式:padding 属性用于设置内边距,即边框与内容之间的距离。
值的个数 | 表达意思 |
padding: 5px; | 1 个值,代表上下左右都有 5 像素内边距。 |
padding: 5px 10px; | 2 个值,代表上下内边距是 5 像素,左右内边距是 10 像素。 |
padding: 5px 10px 20px; | 3 个值,代表上内边距 5 像素,左右内边距 10 像素,下内边距 20 像素。 |
padding: 5px 10px 20px 30px; | 4 个值,上是 5 像素,右 10 像素,下 20 像素,左是 30 像素(顺时针)。 |
属性 | 作用 |
padding-left | 左内边距。 |
padding-right | 右内边距。 |
padding-top | 上内边距。 |
padding-bottom | 下内边距。 |
内边距会影响盒子实际大小
解决方案
外边距的使用方式:margin 属性用于设置外边距,即控制盒子和盒子之间的距离。
值的个数 | 表达意思 |
margin: 5px; | 1 个值,代表上下左右都有 5 像素外边距。 |
margin: 5px 10px; | 2 个值,代表上下外边距是 5 像素,左右外边距是 10 像素。 |
margin: 5px 10px 20px; | 3 个值,代表上外边距 5 像素,左右外边距 10 像素,下外边距 20 像素。 |
margin: 5px 10px 20px 30px; | 4 个值,上是 5 像素,右 10 像素,下 20 像素,左是 30 像素(顺时针)。 |
属性 | 作用 |
margin-left | 左外边距。 |
margin-right | 右外边距。 |
margin-top | 上外边距。 |
margin-bottom | 下外边距 |
外边距可以让块级盒子水平居中的两个条件:
常见的写法,以下三种都可以:
margin-left: auto; margin-right: auto;margin: auto;margin: 0 auto;
注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。
外边距合并
清除内外边距
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。
* { padding:0; /* 清除内边距 */ margin:0; /* 清除外边距 */ }
注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。
border-radius 属性用于设置元素的外边框圆角
border-radius:length...;
<!DOCTYPE html><html><head> <style> .box { width: 200px; height: 100px; border: 1px solid black; border-radius: 20px; } </style></head><body> <div class="box">This is a box with rounded corners.</div></body></html>
<!DOCTYPE html><html><head> <style> .element { width: 200px; height: 150px; background-color: lightblue; border: 1px solid black; border-radius: 20px/30px; } </style></head><body> <div class="element">This element has elliptical corners.</div></body></html>
CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。
box-shadow: h-shadow v-shadow blur spread color inset;
值 | 描述 |
h-shadow | 必需。水平阴影的位置。允许负值。 |
v-shadow | 必需。垂直阴影的位置。允许负值。 |
blur | 可选。模糊距离。 |
spread | 可选。阴影的尺寸。 |
color | 可选。阴影的颜色。 |
inset | 可选。将外部阴影(outset)改为内部阴影。 |
注意:
<!--外部阴影示例 --><!DOCTYPE html><html><head> <style> .box { width: 200px; height: 100px; background-color: lightblue; box-shadow: 5px 5px 10px 2px gray; } </style></head><body> <div class="box">This box has a shadow.</div></body></html>
<!--内部阴影示例 --><!DOCTYPE html><html><head> <style> .box { width: 200px; height: 100px; background-color: lightblue; box-shadow: 5px 5px 10px 2px gray inset; } </style></head><body> <div class="box">This box has a shadow.</div></body></html>
在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。
text-shadow: h-shadow v-shadow blur color;
值 | 描述 |
h-shadow | 必需。水平阴影的位置。允许负值。 |
v-shadow | 必需。垂直阴影的位置。允许负值。 |
blur | 可选。模糊距离。 |
color | 可选。阴影的颜色。 |
<!--示例:立体文字 --><!DOCTYPE html><html><head> <style> .stereoscopic-text { font-size: 48px; color: red; text-shadow: 1px 1px 0px #000, 2px 2px 0px #000, 3px 3px 0px #000, 4px 4px 0px #000, 5px 5px 0px #000, 6px 6px 0px #000, 7px 7px 0px #000, 8px 8px 0px #000; /*这是使用 CSS 的text-shadow属性以逗号分隔多个阴影设置的方式。*/ } </style></head><body> <h1 class="stereoscopic-text">立体字</h1></body></html>
<!--示例:凹凸文字的效果 --><!DOCTYPE html><html lang = "en"><head> <meta charset="utf-8"> <title></title> <style type="text/css"> body { background-color: #ccc; } div { color: #ccc; font: 700 80px "微软雅黑"; } div:first-child { text-shadow: 1px 1px 1px #000,-1px -1px 1px #fff; } div:last-child { text-shadow: -1px -1px 1px #000,1px 1px 1px #fff; } </style></head><body> <div>我是凸起的文字</div> <div>我是凹下的文字</div></body></html>
float 属性用于创建浮动框:当一个元素被设置为浮动float时,它会脱离正常的文档流,向左或向右移动,直到它的外边缘碰到包含块或者另一个浮动元素的边缘。浮动元素可以让文本和行内元素(内联元素)围绕它排列,从而实现一些特殊的布局效果。
选择器 { float: 属性值; }
属性值 | 描述 |
none | 元素不浮动 (默认值)。 |
left | 元素向左浮动。 |
right | 元素向右浮动。 |
加了浮动之后的元素,会具有很多特性,需要我们掌握的.
注意: 浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。
浮动的元素会具有行内块元素的特性
浮动元素经常和标准流父级搭配使用
为了约束浮动元素位置, 我们网页布局一般采取的策略是:先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置.
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
为什么需要清除浮动
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。
由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
清除浮动的本质是清除清除浮动元素脱离标准流造成的影响:浮动的子标签无法撑开父盒子的高度
清除浮动策略是闭合浮动: 只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子.
清除浮动样式语法:
选择器{clear:属性值;}
属性值 | 描述 |
left | 不允许左侧有浮动元素 (清除左侧浮动的影响)。 |
right | 不允许右侧有浮动元素 (清除右侧浮动的影响)。 |
both | 同时清除左右两侧浮动的影响。实际工作中, 几乎只用 clear: both; |
额外标签法也称为隔墙法:额外标签法会在浮动元素末尾添加一个空的标签,额外标签添加清除浮动样式.
<div style="clear:both"></div><!--或者其他标签(如<br/>等)。-->
可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。
overflow:hidden | auto | scroll;
::after 方式是额外标签法的升级版。给父元素添加:
.clearfix::after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6、7 专有,基本用不到了 */ *zoom: 1; }
给父元素添加
.clearfix::before,.clearfix::after { content:""; display:table; } .clearfix::after { clear:both; } .clearfix {/* IE6、7 专有,基本用不到了 */ *zoom:1; }
<!DOCTYPE html><html><head> <style> .container { border: 1px solid gray; padding: 10px; /* 使用伪元素清除浮动 */ zoom: 1; } .container::after { content: ""; display: block; clear: both; } .box { width: 150px; height: 150px; border: 1px solid black; } .left { float: left; background-color: lightblue; } .right { float: right; background-color: lightgreen; } </style></head><body> <div class="container"> <div class="box left">左浮动元素</div> <div class="box right">右浮动元素</div> <p>这是一段文本,会围绕着浮动元素排列。</p> </div></body></html>
版型
示例:
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } .top { height: 50px; background-color: pink; } .banner { height: 80px; width: 960px; margin: 10px auto; background-color: deeppink; border-radius: 15px; } .main ul { list-style: none; } .main { height: 150px;/*很多情况下,我们父级盒子,不方便给出高度,考虑到孩子的高度会变*/ width: 960px; margin: 0 auto 10px auto; background-color: green; } .main li { height: 150px; width: 240px; background-color: #ccc; float: left; } .main li:nth-child(odd) { background-color: #000; } .foot { height: 20px; background-color: pink; } </style></head><body> <div class="top"> </div> <div class="banner"> </div> <div class="main"> <ul> <li></li> <li></li> <li></li> <li></li> </ul> </div> <div class="foot"></div> </body></html>
编程中如何衡量一个人的代码能力:规范标准 优雅高质量 专业 从代码中看出是否有经验
建议遵循以下顺序:
举例:
.class-name { display: block; position: relative; float: left; width: 100px; height: 100px; margin: 0 10px; padding: 20px 0; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; color: #333; background: rgba(0,0,0,.5); border-radius: 10px; }
边偏移用来定位 盒子移动到的最终位置。有 top、bottom、left 和 right 4 个属性。
边偏移属性 | 示例 | 描述 |
top | top: 80px | 顶端偏移量,定义元素相对于其父元素上边线的距离。 |
bottom | bottom: 80px | 底部偏移量,定义元素相对于其父元素下边线的距离。 |
left | left: 80px | 左侧偏移量,定义元素相对于其父元素左边线的距离。 |
right | right: 80px | 右侧偏移量,定义元素相对于其父元素右边线的距离 |
当计算偏移量值为百分比时
定位的盒子有了边偏移才有价值。 一般情况下,凡是有定位地方必定有边偏移。
在 CSS 中,通过 position 属性定义元素的定位模式,语法如下:
选择器 { position: 属性值; }
定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式。
定位模式决定元素的定位方式 ,它通过 CSS 的 position 属性来设置,其值可以分为四个:
值 | 语义 |
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
选择器 { position: relative;}
效果图:
绝对定位的盒子居中
代码示例
<!DOCTYPE html><html><head> <style> .parent { position: relative; width: 300px; height: 300px; border: 1px solid black; } .child { position: absolute; width: 100px; height: 100px; background-color: lightblue; bottom: 0; right: 0; } </style></head><body> <div class="parent"> 父元素 <div class="child">绝对定位的子元素</div> </div></body></html>
示例代码
<!DOCTYPE html><html><head> <style> body { margin: 0; padding: 0; height: 300vh; background: linear-gradient(to bottom, pink, skyblue); } .fixed { position: fixed; top: 100px; left: 50%; margin-left: -40%; width: 80%; height: 100px; background-color: yellow; border: 1px solid black; } </style></head><body> <div class="fixed"></div></body></html>
粘性定位可以被认为是相对定位和固定定位的混合。
语法:
选择器 { position: sticky; top: 10px; }
粘性定位的特点:
示例
<!DOCTYPE html><html><head> <style> * { margin: 0; padding: 0; /* 文字居中 */ text-align: center; } body { background-color: white; height: 2000px; } .box { width: 100%; background-color: pink; border: 1px solid #000; } .head { width: 100%; height: 200px; background-color: yellow; } .box .nav { width: 100%; height: 50px; background-color: rgba(255, 0, 0); position: sticky; top: 10px; z-index: 99; } .bar { width: 100%; height: 50px; background-color: rgba(0, 255, 0); position: sticky; top: 60px; border: 1px solid #000; } .content { width: 100%; height: 200px; background-color: rgba(0, 0, 255); } .footerad { width: 100%; height: 200px; background-color: rgba(255, 0, 255); position: sticky; bottom: 0px; margin: 10px; } </style></head><body> <div class="box"> <div class="head"> 横幅广告 </div> <div class="nav"> 总标题 </div> <div class="contentbox"> <div class="bar stick">标题1</div> <div class="content">内容</div> </div> <div class="contentbox"> <div class="bar stick">标题2</div> <div class="content">内容</div> </div> <div class="contentbox"> <div class="bar stick">标题3</div> <div class="content">内容</div> </div> <div class="footerad"> 底部广告 </div> </div></body></html>
定位模式 | 是否脱标 | 移动位置 |
static 静态定位 | 否 | 不能使用边偏移 |
relative 相对定位 | 否 (占有位置) | 相对于自身位置移动 |
absolute绝对定位 | 是(不占有位置) | 相对于带有定位的父级或document文档 |
fixed 固定定位 | 是(不占有位置) | 浏览器可视区 |
sticky 粘性定位 | 否 (占有位置) | 浏览器可视区 |
属性值 | 描述 |
visible | 不剪切内容也不添加滚动条 |
hidden | 不显示超过对象尺寸的内容,超出的部分隐藏掉 |
scroll | 不管超出内容否,总是显示滚动条 |
auto | 超出自动显示滚动条,不超出不显示滚动条 |
属性 | 区别 | 用途 |
display 显示 | 隐藏对象,不保留位置 | 配合后面js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛 |
visibility 可见性 | 隐藏对象,保留位置 | 使用较少 |
overflow 溢出 | 只是隐藏超出父元素大小的部分 | 1. 可以清除浮动 2. 保证盒子里面的内容不会超出该盒子范围 |
一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。
为什么使用精灵图(目的):为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了 CSS 精灵技术(也称 CSS Sprites、CSS 雪碧)。
核心原理:将网页中的一些小背景图像整合到一张大图中 ,这样服务器只需要一次请求就可以了。
精灵图举例:
精灵图的使用:
字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体。
总结:
字体图标加载的原理
在 HTML 和 CSS 中,可以使用不同进制的编码来表示字符。
.my-class::before { content: '05'; }
现代的网页开发中,十六进制表示法更为常见和通用。同时,不同的字符可能有不同的编码,需要参考字符编码表来确定具体的编码值。此外,确保使用的编码在目标浏览器中能够正确解析和显示相应的字符。
Unicode编码字体:
div {font-family: Arial,"Microsoft Yahei", "微软雅黑";}/*改为*/div {font-family: Arial,"Microsoft Yahei", "FAEF6FC5ED1";}
字体图标是一些网页常见的小图标,我们直接网上下载即可。使用步骤如下
不同网站或平台下载的字体图标要定义两种字体类型
下载完毕之后,注意原先的文件不要删,后面会用。
字体文件格式:不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。
@font-face { font-family: 'icomoon'; src: url('fonts/icomoon.eot?ryy1gp'); src: url('fonts/icomoon.eot?ryy1gp#iefix') format('embedded-opentype'), url('fonts/icomoon.ttf?ryy1gp') format('truetype'), url('fonts/icomoon.woff?ryy1gp') format('woff'), url('fonts/icomoon.svg?ryy1gp#icomoon') format('svg'); font-weight: normal; font-style: normal; font-display: block;}/*不考虑兼容性,可以简化代码 “?ryy1gp” 通常是一个用于缓存控制或版本控制的参数。 “#iefix”通常是为了兼容旧版本的 Internet Explorer。format('字体格式')告诉浏览器使用的什么字体格式*/@font-face { font-family: 'icomoon'; src: url('fonts/icomoon.woff'); font-weight: normal; font-style: normal; font-display: block;}/*上面定义了icomoon字体 定义一个字体系列为icomoon的类*/.icomoon { font-family: 'icomoon';}/*伪元素选择器添加字符编码*/.icon-home::before { content: "05";}
注意:务必保证字体系列 和上面@font-face里面的字体保持一致
<!--使用方式1--><span class="icomoon"></span><!--使用方式2--><span class="icomoon icon-home"></span>
网页中常见一些三角形,使用 CSS 直接画出来就可以,不必做成图片或者字体图标。
一张图, 你就知道 CSS 三角是怎么来的了, 做法如下:
<!DOCTYPE html><html><head> <style> div { width: 0; height: 0; border: 50px solid transparent; border-color: red green blue black; line-height: 0; font-size: 0; } </style></head><body> <div></div></body></html>
什么是界面样式
所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。
li { cursor: pointer; }
属性值:
自定义鼠标样式:除了使用预定义的鼠标样式值,还可以使用自定义的光标图像。
通过设置不同的鼠标样式,可以为用户提供更直观的反馈,增强用户与网页的交互性。
给表单添加 outline: 0; 或者 outline: none; 样式之后,就可以去掉表单元素被选中时的默认的蓝色边框。
input { outline: none; }
实际开发中,我们文本域右下角是不可以拖拽的,会影响布局
textarea{ resize: none; }
CSS 的 vertical-align 属性使用场景: 经常用于设置图片或者表单(行内块元素)和文字垂直对齐。
官方解释: 用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效。
语法:
vertical-align : baseline | top | middle | bottom
图片、表单元素(<input>等)都属于行内块元素,默认的 vertical-align 是基线对齐。此时图片、表单这些行内块元素(例如<input/>)的 片底部有空白缝隙
解决图片底侧会有一个空白缝隙的问题(两个或多个行内块在一个盒子里面也会出现对不齐的问题,也能通过以下方式解决)
一、white-space属性:设置或检索对象内文本显示方式。通常我们使用于强制一行显示内容
二、word-break属性:自动换行
三、overflow-wrap属性(也称为 word-wrap)
四、text-overflow文字溢出属性:设置或检索是否使用一个省略标记(...)标示对象内文本的溢出
单行文本溢出显示省略号必须满足三个条件:
/*1. 先强制一行内显示文本*/ white-space: nowrap; ( 默认 normal 自动换行) /*2. 超出的部分隐藏*/ overflow: hidden; /*3. 文字用省略号替代超出的部分*/ text-overflow: ellipsis;
多行文本溢出显示省略号
多行文本溢出显示省略号,有较大兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webkit内核)
<!--示例--><!DOCTYPE html><html><head> <style> .text-container { width: 200px; height: 60px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; /*这是为了在 WebKit 浏览器中启用多行文本的省略号显示。对于其他浏览器,可能需要使用不同的属性值或添加相应的浏览器前缀*/ -webkit-line-clamp: 3; /*这个属性用于限制文本显示的行数,超出的部分将显示省略号。*/ -webkit-box-orient: vertical; /*这将使文本在容器中垂直排列,以便实现多行文本的显示和省略号效果*/ } </style></head><body> <div class="text-container"> This is a long text that will be truncated and show ellipsis when it exceeds the specified number of lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </div></body></html>
更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更简单。
巧妙利用一个技术更快更好的布局:
<!--示例--><!DOCTYPE html><html><head> <style> * { margin: 0; padding: 0; } .float { float: left; } .div1 { width: 100px; height: 50px; margin-right: -5px; background-color: red; border: 5px solid green; } .div1:hover, .div2:hover { position: relative; } .div2 { width: 100px; height: 50px; margin-right: -5px; background-color: blue; border: 5px solid black; } </style></head><body> <div class="box" > <div class="div1 float"></div> <div class="div2 float"></div> </div></body></html>
效果
布局示意图
巧妙运用浮动元素不会压住文字的特性
<!DOCTYPE html><html><head> <style> .box1 { width: 0; height: 0; /* 把上边框宽度调大 */ /* border-top: 100px solid transparent; border-right: 50px solid skyblue; */ /* 左边和下边的边框宽度设置为0 */ /* border-bottom: 0 solid blue; border-left: 0 solid green; */ /* 1.只保留右边的边框有颜色 */ border-color: transparent red transparent transparent; /* 2. 样式都是solid */ border-style: solid; /* 3. 上边框宽度要大, 右边框 宽度稍小, 其余的边框该为 0 */ border-width: 100px 50px 0 0 ; }</style></head><body> <div class="box1"></div></body></html>
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /* 把我们所有标签的内外边距清零 */ * { margin: 0; padding: 0; } .father { overflow: hidden; width: 160px; height: 25px; margin: 30px auto; border: 1px solid red; background-color: red; text-align: center; } .price1, .price2 { display: inline-block; width: 80px; height: 25px; text-align: center; line-height: 25px; vertical-align: middle; } .price1 { font-size: 15px; color: #fff; font-weight: bold; } .price2 { font-size: 12px; background-color: #fff; color: #828281; text-decoration: line-through; } .relative { position: relative; } .absolute { position: absolute; top: 0; left: 50%; margin-left: -10px; width: 0; height: 0; border-style: solid; border-color: transparent white transparent transparent; border-width: 25px 10px 0 0; } </style></head><body> <div class="father relative"> <span class="price1">¥1650</span><span class="price2">¥5650</span> <span class="absolute"></span> </div></body></html>
下面是CSS初始化代码示例。
/* 把我们所有标签的内外边距清零 */* { margin: 0; padding: 0;}/* em 和 i 斜体的文字不倾斜 */em,i { font-style: normal;}/* 去掉li 的小圆点 */li { list-style: none;}img { /* border 0 照顾低版本浏览器 如果 图片外面包含了链接会有边框的问题 */ border: 0; /* 取消图片底侧有空白缝隙的问题 */ vertical-align: middle;}button { /* 当我们鼠标经过button 按钮的时候,鼠标变成小手 */ cursor: pointer;}a { color: #666; text-decoration: none;}a:hover { color: #c81623;}button,input { /* "B8BF53" 就是宋体的意思 这样浏览器兼容性比较好 */ font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "B8BF53", sans-serif;}body { /* CSS3 抗锯齿形 让文字显示的更加清晰 */ -webkit-font-smoothing: antialiased; background-color: #fff; font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "B8BF53", sans-serif; color: #666}.hide,.none { display: none}/* 清除浮动 */.clearfix:after { visibility: hidden; clear: both; display: block; content: "."; height: 0;}.clearfix { *zoom: 1}
/*示例2*//* CSS Document */body {margin:0; padding:0; font:12px "B8BF53",san-serif;background:#fff;}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,blockquote,p{padding:0; margin:0;} table,td,tr,th{font-size:12px;}li{list-style-type:none;}img{vertical-align:top;border:0;}ol,ul {list-style:none;}h1,h2,h3,h4,h5,h6 {font-size:12px; font-weight:normal;}address,cite,code,em,th,i {font-weight:normal; font-style:normal;}button {cursor: pointer;}button,input {font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "B8BF53", sans-serif;}.fB{font-weight:bold;}.f12px{font-size:12px;}.f14px{font-size:14px;}.left{float:left;}.right{float:right;}.hide,.none {display: none}a {color:#2b2b2b; text-decoration:none;}a:visited {text-decoration:none;}a:hover {color:#ba2636;text-decoration:underline;}a:active {color:#ba2636;}.clearfix:after {visibility: hidden;clear: both;display: block; content: ".";height: 0;}.clearfix { *zoom: 1}