css笔记
字体
字体属性
font-family: "微软雅黑"; /* 字体*/
font-size:20px; /* 大小*/
font-weight:500; /* 粗细*/
font-style:italic /* 斜体*/
外观
文本属性
/* 颜色 */
color :red;
/* 文本对齐 */
text-align: left;
/* 行高 */
line-height: 30px;
/* 首行缩进 */
text-indent: 2em;
/* 下划线、上划线、删除线等 */
text-decoration:none;
复合选择器
/* 后代选择器(含子孙后代) */
.nihao p{}
/* 子代选择器(只含子代) */
.nihao>p {}
/* 交集选择器(中间不能有空格) */
.nihao.wohao{}
/* 并集选择器(中间逗号隔开) */
.nihao,.wohao {}
链接伪类选择器
/* 未访问的链接 */
a:link {}
/* 已访问的链接 */
a:visited {}
/* 鼠标移动到链接上 */
a:hover {}
/* 选定的链接 */
a:active {}
需要给a链接单独制定样式
input:foucs 聚焦伪类选择器
属性选择器
有点正则表达式的意思
/* 属性选择器使用方法 */
/* 选择的是: 既是button 又有 disabled 这个属性的元素 */
/* 属性选择器的权重是 10 */
/* 1.直接写属性 */
button[disabled] {
cursor: default;
}
button {
cursor: pointer;
}
/* 2. 属性等于值 */
input[type="search"] {
color: pink;
}
/* 3. 以某个值开头的 属性值 */
div[class^="icon"] {
color: red;
}
/* 4. 以某个值结尾的 */
div[class$="icon"] {
color: green;
}
/* 5. 可以在任意位置的 */
div[class*="icon"] {
color: blue;
}
结构伪类选择器
ul li:first-child {
background-color: pink;
}
ul li:last-child {
background-color: deeppink;
}
/* nth-child(n) 我们要第几个,n就是几 比如我们选第8个, 我们直接写 8就可以了 */
ul li:nth-child(8) {
background-color: lightpink;
}
/* 偶数 */
ul li:nth-child(even) {
background-color: aquamarine;
}
/* 奇数 */
ul li:nth-child(odd) {
background-color: blueviolet;
}
/*n 是公式,从 0 开始计算 */
ul li:nth-child(n) {
background-color: lightcoral;
}
/* 偶数 */
ul li:nth-child(2n) {
background-color: lightskyblue;
}
/* 奇数 */
ul li:nth-child(2n + 1) {
background-color: lightsalmon;
}
/* 选择第 0 5 10 15, 应该怎么选 */
ul li:nth-child(5n) {
background-color: orangered;
}
/* n + 5 就是从第5个开始往后选择 */
ul li:nth-child(n + 5) {
background-color: peru;
}
/* -n + 5 前五个 */
ul li:nth-child(-n + 5) {
background-color: tan;
}
</style>
div span:nth-child(2) {
background-color: pink;
}
/* 总结: :nth-child(n) 选择 父元素里面的 第 n个孩子, 它不管里面的孩子是否同一种类型 */
/* of-type 选择指定类型的元素的 第几个*/
div span:first-of-type {
background-color: purple;
}
div span:last-of-type {
background-color: skyblue;
}
div span:nth-of-type(2) {
background-color: red;
}
伪元素选择器
<style>
div {
width: 300px;
height: 300px;
border: 1px solid #000;
}
div::before {
content: "我";
display: inline-block;
width: 100px;
height: 100px;
background-color: pink;
}
div::after {
content: "小猪佩奇";
display: inline-block;
width: 100px;
height: 100px;
background-color: pink;
}
</style>
</head>
<body>
<div>是</div>
</body>
- `before` 和 `after` 必须有 `content` 属性
- `before` 在内容前面,after 在内容后面
- `before` 和 `after` 创建的是一个元素,但是属于行内元素
- 创建出来的元素在 `Dom` 中查找不到,所以称为伪元素
- 伪元素和标签选择器一样,权重为 1
显示模式
标签显示模式 重点
用于布局
块级元素
<div> 、<h1>~<h6>、<p>、、<ul>、<ol>、<li>
行内元素
<span>、<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、
行内块元素
<img />、<input />、<td>
元素模式 | 元素排列 | 设置样式 | 默认宽度 | 包含 |
---|---|---|---|---|
块级元素 | 一行只能放一个块级元素 | 可以设置宽度高度 | 容器的100% | 容器级可以包含任何标签 |
行内元素 | 一行可以放多个行内元素 | 不可以直接设置宽度高度 | 它本身内容的宽度 | 容纳文本或则其他行内元素 |
行内块元素 | 一行放多个行内块元素 | 可以设置宽度和高度 | 它本身内容的宽度 |
标签显示模式转换 display
- 块转行内:display:inline;
- 行内转块:display:block;
- 块、行内元素转换为行内块: display: inline-block;
单行文本垂直居中
line-height: 盒子高度;
元素背景
background-color: #fff;
background-image: url();
background-position: 0 0;
background-size: contain;
background-repeat: no-repeat;
/* 背景是滚动的还是固定的 */
background-attachment: fixed;
/* 书写顺序官方并没有强制标准 */
盒子
盒子由内容、边框、内边距、外边距组成
border: 1px solid;
margin:10px;
padding:10px;
border-radius: 10px;
/* 阴影 */
box-shadow: 0 15px 30px rgba(0, 0, 0, .4);;
盒子水平居中
先设定盒子宽度,再
margin:0 auto
外边距塌陷
相邻块元素外边距合并 原因有可能是游览器认为外边距属性名一样,就合并了,取了较大值
处理方式父元素加overflow: hidden
文字阴影
text-shadow
浮动 float
布局的三种机制
CSS 提供了 **3 种机制**来设置盒子的摆放位置,分别是**普通流**(标准流)、**浮动**和**定位**,其中:
1. **普通流**(标准流)
- **块级元素**会独占一行,**从上向下**顺序排列;
- 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
- **行内元素**会按照顺序,**从左到右**顺序排列,碰到父元素边缘则自动换行;
- 常用元素:span、a、i、em等
2. **浮动**
- 让盒子从普通流中**浮**起来,主要作用让多个块级盒子一行显示。
3. **定位**
- 将盒子**定**在浏览器的某一个**位**置——CSS 离不开定位,特别是后面的 js 特效。
纵向排列用标准流,横向用浮动
float:left
任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。
生成的块级框和我们前面的行内块极其相似
**如果一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动。防止引起问题**
清除浮动
因为父级盒子很多情况下,不方便给高度,但是子盒子浮动就不占有位置,最后父级盒子高度为0,
就影响了下面的标准流盒子
准确地说,并不是清除浮动,而是**清除浮动后造成的影响**
**清除浮动主要为了解决父级元素因为子级浮动引起内部高度为0 的问题。清除浮动之后, 父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了**
1.额外标签法
.clear{
clear:both;
}
在浮动的盒子之下再放一个标签,在这个标签中使用clear:both,来清除浮动对页面的影响
<style>
/*很多情况下,我们的父盒子,不方便给高度 根据内容撑开,有多少内容,我的父盒子就有多高*/
.one {
width: 500px;
/*background-color: pink;*/
border: 1px solid red;
}
/*因为damao 二毛 浮动了,不占有位置, 而父级又没有高度, 所以two 就到底下去了*/
.damao {
float: left;
width: 200px;
height: 200px;
background-color: purple;
}
.ermao {
float: left;
width: 250px;
height: 250px;
background-color: skyblue;
}
.two {
width: 700px;
height: 150px;
background-color: #000;
}
/*清除浮动*/
.clear {
clear: both;
}
</style>
</head>
<body>
<div class="one">
<div class="damao"></div>
<div class="ermao"></div>
<div class="clear"></div> //此处专门加入含属性(clear:both )的标签,用来清除浮动带来的影响
</div>
<div class="two"></div>
</body>
2父级元素添加overflow:hidden
3父级元素添加after伪元素
<style>
/*声明清除浮动的样式*/
.clearfix:after {
content: "";
display: block;
height: 0;
visibility: hidden;
clear: both;
}
.clearfix {
*zoom: 1; /*ie6,7 专门清除浮动的样式*/
}
/*很多情况下,我们的父盒子,不方便给高度 根据内容撑开,有多少内容,我的父盒子就有多高*/
.one {
width: 500px;
/*background-color: pink;*/
border: 1px solid red;
}
/*因为damao 二毛 浮动了,不占有位置, 而父级又没有高度, 所以two 就到底下去了*/
.damao {
float: left;
width: 200px;
height: 200px;
background-color: purple;
}
.ermao {
float: left;
width: 250px;
height: 250px;
background-color: skyblue;
}
.two {
width: 700px;
height: 150px;
background-color: #000;
}
</style>
</head>
<body>
<div class="one clearfix">
<div class="damao"></div>
<div class="ermao"></div>
</div>
<div class="two"></div>
4使用双伪元素清除浮动
<style>
/*声明清除浮动的样式*/
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
/*很多情况下,我们的父盒子,不方便给高度 根据内容撑开,有多少内容,我的父盒子就有多高*/
.one {
width: 500px;
/*background-color: pink;*/
border: 1px solid red;
}
/*因为damao 二毛 浮动了,不占有位置, 而父级又没有高度, 所以two 就到底下去了*/
.damao {
float: left;
width: 200px;
height: 200px;
background-color: purple;
}
.ermao {
float: left;
width: 250px;
height: 250px;
background-color: skyblue;
}
.two {
width: 700px;
height: 150px;
background-color: #000;
}
</style>
</head>
<body>
<div class="one clearfix">
<div class="damao"></div>
<div class="ermao"></div>
</div>
<div class="two"></div>
</body>
布局流程
1、必须确定页面的版心(可视区), 我们测量可得知。
2、分析页面中的行模块,以及每个行模块中的列模块。其实页面布局,就是一行行罗列而成
3、制作HTML结构。我们还是遵循,先***有结构,后有样式****的原则。结构永远最重要。
4、然后开始运用盒子模型的原理,通过DIV+CSS布局来控制网页的各个模块。
定位
将一个盒子自由的漂浮在其他盒子(包括标准流和浮动)的上面
/*定位 = 定位模式 + 边偏移*/
position: relative;
top: 100px;
left: 100px;
相对定位(relative) 相对于自己原来在标准流位置来说
相对定位不脱标
绝对定位 (absolute)相对父级或祖级元素的位置
子级是绝对定位,父级要用相对定位
绝对定位脱标
固定定位(fixed)相对于游览器窗口来说
静态定位 (static)按照标准流特性摆放位置,它没有边偏移
定位顺序
z-index 数字越大越靠上
z-index` 只能应用于**相对定位**、**绝对定位**和**固定定位**的元素,其他**标准流**、**浮动**和**静态定位**无效。
定位特殊用法, 行内元素加了绝对定位或固定定位属性之后,可以设置宽度,高度
块级元素添加绝对或固定定位之后,如果不给宽度或高度,默认大小是内容大小
元素显示与隐藏
display :none
none 隐藏对象 且不占原来位置 block 显示对象
visibility:visible ; 对象可视
visibility:hidden; 对象隐藏 占有原来位置
overflow:
属性值 | 描述 |
---|---|
visible | 不剪切内容也不添加滚动条 |
hidden | 不显示超过对象尺寸的内容,超出的部分隐藏掉 |
scroll | 不管超出内容否,总是显示滚动条 |
auto | 超出自动显示滚动条,不超出不显示滚动条 |
鼠标样式cursor
属性值 | 描述 |
---|---|
default | 小白 默认 |
pointer | 小手 |
move | 移动 |
text | 文本 |
not-allowed | 禁止 |
防止拖拽文本域resize
<textarea style="resize: none;"></textarea>
行内元素或者行内块元素垂直对齐
vertical-align : baseline |top |middle |bottom
特别是行内块元素, **通常用来控制图片/表单与文字的对齐**。
溢出的文字省略号显示
/*1. 先强制一行内显示文本*/
white-space: nowrap;
/*2. 超出的部分隐藏*/
overflow: hidden;
/*3. 文字用省略号替代超出的部分*/
text-overflow: ellipsis;
精灵图
一次使用一张图片的某个部分
新增选择器
1.属性选择器 标签【属性】
2.结构伪类选择器 在如ul列表中使用 ul li :first-child
nth-child (enen偶 add奇) 奇偶选择
nth-child(公式)便利
伪类 选择器利用属性筛选元素的选择器
伪元素 用css创建的标签元素 而不需要html标签,简化了html结构 行内元素
::before ::after
盒子模型类型
box-sizing:content-box 默认 会撑大盒子
box-sizing:border-box 设置padding和border不会撑大盒子
transform 动画
p {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 200px;
background-color: purple;
/* margin-top: -100px;
margin-left: -100px; */
/* translate(-50%, -50%) 盒子往上走自己高度的一半 */
transform: translate(-50%, -50%);
}
span {
/* translate 对于行内元素是无效的 */
transform: translate(300px, 300px);
}
animation 动画
<style>
/* 我们想页面一打开,一个盒子就从左边走到右边 */
/* 1. 定义动画 */
@keyframes move {
/* 开始状态 */
0% {
transform: translateX(0px);
}
/* 结束状态 */
100% {
transform: translateX(1000px);
}
}
div {
width: 200px;
height: 200px;
background-color: pink;
/* 2. 调用动画 */
/* 动画名称 */
animation-name: move;
/* 持续时间 */
animation-duration: 2s;
}
</style>
</head>
<body>
<div></div>
</body>
flex布局
## 2.0 flex布局原理
+ flex 是 flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局。
+ 当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。
+ flex布局又叫伸缩布局 、弹性布局 、伸缩盒布局 、弹性盒布局
+ 采用 Flex 布局的元素,称为 Flex 容器(flex
container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex
item),简称"项目"。
**总结**:就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
## 3.0 父项常见属性
display:flex;
+ flex-direction:设置主轴的方向
+ justify-content:设置主轴上的子元素排列方式
+ flex-wrap:设置子元素是否换行
+ align-content:设置侧轴上的子元素的排列方式(多行)
+ align-items:设置侧轴上的子元素排列方式(单行)
+ flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap
### 3.1 flex-direction设置主轴的方向
+ 在 flex 布局中,是分为主轴和侧轴两个方向,同样的叫法有 : 行和列、x 轴和y 轴
+ 默认主轴方向就是 x 轴方向,水平向右
+ 默认侧轴方向就是 y 轴方向,水平向下
+ 注意: 主轴和侧轴是会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的
### 3.2 justify-content 设置主轴上的子元素排列方式
flex-start
flex-end
center
space-around 平分
space-between 先贴两边,其余平分
### 3.3 flex-wrap设置是否换行
+ 默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,flex布局中默认是不换行的。
+ nowrap 不换行
+ wrap 换行
### 3.4 align-items 设置侧轴上的子元素排列方式(单行 )
+ 该属性是控制子项在侧轴(默认是y轴)上的排列方式 在子项为单项(单行)的时候使用
+ flex-start 从头部开始
+ flex-end 从尾部开始
+ center 居中显示
+ stretch 拉伸
### 3.5 align-content 设置侧轴上的子元素的排列方式(多行)
设置子项在侧轴上的排列方式 并且只能用于子项出现 换行 的情况(多行),在单行下是没有效果的。
### 3.6 align-content 和align-items区别
+ align-items 适用于单行情况下, 只有上对齐、下对齐、居中和 拉伸
+ align-content适应于换行(多行)的情况下(单行情况下无效), 可以设置 上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值。
+ 总结就是单行找align-items 多行找 align-content
### 3.7 flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性
flex-flow:row wrap;
## 4.0 flex布局子项常见属性
+ flex子项目占的份数
+ align-self控制子项自己在侧轴的排列方式
+ order属性定义子项的排列顺序(前后顺序)
### 4.1 flex 属性
flex 属性定义子项目分配剩余空间,用flex来表示占多少份数。
.item {
flex: <number>; /* 默认值 0 */
}
### 4.2 align-self控制子项自己在侧轴上的排列方式
align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。
默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。
span:nth-child(2) {
/* 设置自己在侧轴上的排列方式 */
align-self: flex-end;
}
### 4.3 order 属性定义项目的排列顺序
数值越小,排列越靠前,默认为0。
注意:和 z-index 不一样。
.item {
order: <number>;
}
emment语法
快捷输入
标签 table键
标签*数字 table键
ui>li table键 div>span table键 父子级包含
div+p table键 兄弟级
.haode #haode 默认div类 id p.haode p#haode
ui>li#hao ui>li.hao
.hao$*10
div{你好}
div{你好}*10
css 简写
首字母 table键