# CSS基础

W3C教程

# 背景

background背景简写顺序

background-color /*背景色*/
background-image /*图片背景*/
background-repeat /*是否重复*/
background-attachment	/*是否附着*/
background-position	/*背景图片位置*/

# 边框

  • 每条边的样式可以单独设定
border-style /*边框样式,是必须的*/
border-width /*设置每条边的宽度*/
border-color /*设置每条边的颜色*/
border-top-style: dotted; /*指定每个边框的样式*/
  • 简写属性
border: 5px solid red;
  • 简写单条边属性
border-left: 6px solid red;
  • 圆角边框
border-radius: 5px;

# 高度/宽度

height和width可设置为一下值:

  • auto:浏览器默认计算
  • length:以px、cm等计算
  • %:百分比
  • initial:默认值
  • inherit:从父元素继承

浏览器窗口变化时

max-width: 设置元素的最大宽度,内容区域大于该宽度时,会自动收缩,改善对小窗口的处理

min-width:设置元素最小宽度,内容区域小于该宽度时,会自动扩展

# 轮廓

轮廓实在元素周围绘制一条线,在边框之外,以凸显元素

ouline
outline-style
outline-color
/*thin 1px,medium 3px,thick 5px*/
outline-width:thin; 
/*轮廓偏移*/
outline-offset

注:outline属性不能为每条边单独设置

# 文本(重要)

  • 文本颜色,color属性

# 文本对齐

  • 文本水平对齐
text-align:left; /*水平对齐方式*/
text-align:justify; /*拉伸每一行,使得每一行具有相同宽度*/
  • 文本垂直对齐
vertical-align:top;
  • 文本方向
direction
unicode-bidi
  • 文本装饰,text-decoration下划线、上划线、删除线

  • 文本大小写转换text-transform

# 文字间距

/*文本缩进*/
text-indent:50px;
/*字符之间的间距*/
letter-spacing: 3px;
/*行高*/
line-height:0.8;
/*单词间距*/
word-spacing:10px;
/*空白*/
white-space:nowrap;
/*文本阴影效果,水平,垂直*/
text-shadow:2px 2px;

# 字体

# 5个通用字体族

  • 衬线字体(Serif)- 在每个字母的边缘都有一个小的笔触。它们营造出一种形式感和优雅感。
  • 无衬线字体(Sans-serif)- 字体线条简洁(没有小笔画)。它们营造出现代而简约的外观。
  • 等宽字体(Monospace)- 这里所有字母都有相同的固定宽度。它们创造出机械式的外观。
  • 草书字体(Cursive)- 模仿了人类的笔迹。
  • 幻想字体(Fantasy)- 是装饰性/俏皮的字体。

# 字体配置

/*以需要的字体开始,以通用的字体结束*/
font-family: "Times New Roman", Times, serif;
/*指定斜体*/
font-style: italic;
/*字体粗细*/
font-weight: bold;

# 字体大小

/*像素设置字体大小*/
font-size: 40px;
/*使用em设置,1em默认为16px*/
font-size:1em;
/*响应式单位vm,1vm为视口宽度的1%*/
font-size: 10vw;

# 简写属性font

font-style
font-variant
font-weight
font-size/line-height 必须
font-family 必须

# 图标

使用图标库,通过CSS设置

# 链接

四种链接状态:

  • a:link,未访问的链接
  • a:visited,用户访问过的链接
  • a:hover,用户鼠标悬停时
  • a:active:链接被点击时

# 列表

在使用简写属性时,属性值的顺序为:

  • list-style-type(如果指定了 list-style-image,那么在由于某种原因而无法显示图像时,会显示这个属性的值)
  • list-style-position(指定列表项标记应显示在内容流的内部还是外部)
  • list-style-image(将图像指定为列表项标记)

# 表格

/*表格边框*/
border: 1px solid black;
/*合并表格边框*/
border-collapse: collapse;
/*表格对齐*/
text-align: center;
vertical-align: bottom;

水平分割线

border-bottom: 1px solid #ddd;

条状表格

tr:nth-child(even) {background-color: #f2f2f2;}

# CSS中级教程

# 元素排版

# display布局方式

display属性

描述
none 此元素不显示
block 显示为块级元素
inline 默认,显示为内联元素
inline-block 行内块
table 块级表格
inherit 继承父元素的属性

visibility属性

描述
visible 默认可见
hidden 不可见
collapse 表格中使用可删除一行或一列
inherit 继承父元素

# grid布局

基本概念:网格行、网格列、网格间隙、网格线

grid容器

  • grid-template-columns 定义列数和每列宽度,auto为相同宽度
  • grid-template-rows 定义行数和每行高度,auto为相同高度
  • justify-content 容器内对齐整个网格
  • align-content 垂直对齐

grid元素

  • grid-column 定义项目在哪一列
grid-column: 1 / 5; //1-5列之间
grid-column: 1 / span 3; //第一列开始跨越三列
  • grid-row 定义项目在哪一行
grid-row: 1 / 4; // 1-4行之间
grid-row: 1 / span 2; // 第一行开始跨越两行
  • grid-area 范围简写:行开始、列开始、行结束、列结束
grid-area: 1 / 2 / 5 / 6;
grid-area:myArea;//为网格项目分配名称
grid-template-areas: 'myArea myArea myArea myArea myArea';//在容器中使用

# position定位

  • static 正常文档流
  • relative 相对于元素自身位置
  • fixed 相对于视口
  • absolute 绝对定位,相对于最近的定位祖先元素
  • sticky 根据用户的滚动位置进行定位

# overflow溢出

overflow属性:

  • visible 溢出不会剪裁,内容会在元素框外渲染
  • hidden 溢出被裁减,其余内容不可见
  • scroll 溢出被裁减,其余内容滚动可见
  • auto 溢出的时候添加滚动条

overflow-x 控制水平

overflow-y 控制垂直

# float浮动和清除

float : left|right|none

clear:

  • none 允许两侧都有浮动元素
  • left 左侧不允许浮动元素
  • right 右侧不允许浮动元素
  • both 左右均不允许浮动元素

设置clear的元素会在下方显示

如果一个元素比包含它的元素高,并且是浮动的,它将溢出到其容器外

  • 使用overflow:auto解决
  • clearfix 添加伪元素解决
.clearfix::after {
  content: "";
  clear: both;
  display: table;
}

# box-sizing

允许在元素的总宽度和高度中包括内边距和边框

box-sizing: border-box;

# display:inline-block

允许元素设置宽高

# 对齐

  • 居中对齐元素:margin:auto;需要设置width
  • 居中对齐文本:text-align:center;需要设置width
  • 居中对齐图像
img {
  display: block;
  margin-left: auto;
  margin-right: auto;
  width: 40%;
}
  • 左右对齐position
.right {
  position: absolute;
  right: 0px;
  width: 300px;
}
  • 左右对齐float
.right {
  float: right;
  width: 300px;
}
  • 垂直对齐padding
  • 垂直对齐line-height=height
  • 垂直对齐position和transform
.center { 
  height: 200px;
  position: relative;
  border: 3px solid green; 
}

.center p {
  margin: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
  • 垂直对齐使用flex
.center {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 200px;
  border: 3px solid green; 
}

总结:

  • 水平对齐:margin、text-align、float、position
  • 垂直对齐:padding、line-height、position、flex

# 选择器

# 组合器

  • 后代选择器(空格)
  • 子选择器(>)
  • 相邻兄弟选择器(+)
  • 通用兄弟选择器(~)

# 伪类:

伪类用于定义元素的特殊状态

选择器 例子 例子描述
:active a:active 选择活动的链接
:link a:link 选择未访问的链接
:visited a:visited 选择所有已访问的链接
:hover a:hover 选择鼠标悬停时的链接
:focus input:focus 获得焦点的input元素
:first-child p:first-child 选择作为父元素第一个元素的p元素
:nth-child(2) p:nth-child(2) 选择作为父元素第二个元素的p元素
:valid input:valid 选择所有具有有效值的input元素

# 伪元素::

伪元素用于设置元素指定部分的样式

选择器 例子 例子描述
::after h1::after h1元素后添加内容
::before h1::before h1元素前添加内容
::first-letter p::fisrt-letter 向文本的首字母添加特殊样式
::first-line p::first-line 为所有p元素的首行添加样式
::selection ::selection 匹配用户选择的元素

# 常用组件原理

# 导航栏

导航栏就是链接列表

页面

<ul>
  <li><a href="index.asp">Home</a></li>
  <li><a href="news.asp">News</a></li>
  <li><a href="contact.asp">Contact</a></li>
  <li><a href="about.asp">About</a></li>
</ul>
  • 垂直导航栏
/*从列表删除项目符号以及内外边距*/
ul {
    list-style-type:none;
    margin: 0;
    padding: 0;
    width: 200px;
  	background-color: #f1f1f1;
}
/*垂直导航栏*/
li a {
    display:block; /*整个链接区域都可以被单击*/
    width: 60px;
    padding:8px 16px;
    text-decoration: none;
}
/*鼠标悬停改变颜色*/
li a:hover{
    background-color:#555;
    color:white;
}
  • 水平导航栏:行内或者浮动
li {
    display:inline;
}

# 下拉菜单

通过hover和display实现

# 计数器

用于多集目录编号

# 图片库

图像精灵

# Tooltip

  • 绝对定位
  • visible
  • 伪元素实现箭头

# 按钮

# 分页器

# css特异性

特异性计算方法:

  • 内联 1000
  • ID 100
  • 属性、类、伪类 10
  • 元素名称、伪类 1

特异性规则:

  • 特异性相同,应用最新的规则
  • ID选择器比属性选择器特异性更高
  • 类选择器比元素选择器特异性更高
  • style标签比外部样式表更具体

# CSS3高级教程

# 美化效果

# border-radius圆角

border-radius可以接收一到四个值:

  • 四个值:左上、右上、右下、左下
  • 三个值:左上、(右上、左下)、右下
  • 两个值:(左上、右下)、(右上、左下)
  • 一个值:四个角

椭圆角:

border-radius: 50px / 15px;

# border-image边框图像

属性有五部分:

  • 用作边框的图像
  • 边框向内偏移
  • 图像边框的宽度,超过50的话,边线就消失了
  • 定义中间部分重复还是拉伸
border-image: source slice width outset repeat|initial|inherit;

# 背景

  • background-clip 背景绘制区域(其他区域不显示)
  • background-origin 背景图像放置位置
# 多重背景

background-image添加多个背景,不同背景用逗号分开,第一幅图像最靠近观察者

#example1 {
  background-image: url(/i/photo/flower.gif), url(/i/paper.jpg);
  background-position: right bottom, left top;
  background-repeat: no-repeat, repeat;
  padding: 15px;
}

也可以通过background简写

# 背景尺寸
  • 长度、百分比
  • contain 宽高<=内容区域
  • cover 宽高>=内容区域

# 渐变

两种渐变类型:

  • 线性渐变(向下/向上/向左/向右/对角线),默认从上到下
/*语法*/
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);

background-image: linear-gradient(to bottom right, red, yellow); /*向右下*/ background-image: linear-gradient(to right, red, yellow);/*向右*/ 
background-image: linear-gradient(45deg,red,yellow);/*使用角度*/
background-image: linear-gradient(to right,rgba(255,0,0,0),rgba(255,0,0,1)); /*使用透明度*/
  • 径向渐变(由其中心定义),默认shape为椭圆,size为最远角,position为中心
    • shape:circle、ellipse
    • size:渐变的大小,即渐变到哪里停止
/*语法*/
background-image: radial-gradient(shape size at position, start-color, ..., last-color);
background-image: radial-gradient(red, yellow, green);/*从中心开始*/
background-image: radial-gradient(circle, red, yellow, green); /*圆形渐变*/

# 阴影

在文本和元素上添加阴影

  • text-shadow
text-shadow:2px 2px; //指定水平阴影和垂直阴影
text-shadow:2px 2px red; //添加颜色
text-shadow:2px 2px 3px red; //添加模糊
  • box-shadow类似

# 文本效果

  • text-overflow 文字溢出,裁减或省略
text-overflow:clip;
text-overflow: ellpsis;
  • word-wrap 长文字被折断并换行到下一行
word-wrap: break-word;
  • word-break 指定换行规则
word-break: keep-all; //连字符处打断
word-break: break-all; //任何位置打断

# 网络字体

在@font-face定义字体

  • TrueType(TTF)windows、mac操作系统常用字体
  • OpenType (OTF) 可缩放
  • WOFF 2009年开发,是W3C推荐标准,本质是压缩OTF、TTF并添加元数据
  • WOFF 2.0 提供更好的压缩
@font-face {
  font-family: myFirstFont;
  src: url(sansation_light.woff);
}

div {
  font-family: myFirstFont;
}

# CSS动画

# 2D转换

CSS transform属性,允许移动、旋转、缩放、倾斜元素

transform: translate(50px, 100px);// 向右移动50px,向下移动100px
transform: rotate(20deg); // 顺时针旋转20度
transform: rotate(-20deg); // 逆时针旋转20度

transform: scale(2, 3); //宽变为2倍,高变为3倍
transform: scaleX(2); //宽变为2倍
transform: scaleY(0.5); //高变为0.5倍

transform: skew(20deg,10deg) //沿着x轴,y轴倾斜
transform: skewX(20deg); // 沿着x轴倾斜

// x缩放、y倾斜、x倾斜、y缩放、x平移、y平移
transform: matrix(1, -0.3, 0, 1, 0, 0);

# 3D转换

3D转换方法

transform: rotateX(150deg); //绕x轴旋转150度
transform: rotateY(130deg); //绕y轴旋转
transform: rotateZ(130deg); //绕z轴旋转

3D变换属性:

  • transform-origin 改变元素位置
  • transform-style 子元素在3D空间的显示
  • perspective:观察者与z=0平面的距离值越小,视角越深,子元素获得透视效果
  • perspective-origin:x-positon y-position;3D元素的底部位置,透视点在该元素的位置

# 过渡(属性变化)

首先确定添加效果的CSS属性,以及效果的持续时间

  • transition:属性和持续时间

  • transition-property:要添加过渡效果的属性

  • transition-duration:持续时间

  • transition-delay:过渡效果的延迟(s)

transition: width 2s
transition: width 2s, height 2s, transform 2s; // 过渡+转换
transition: width 2s linear 1s; // 简写:属性、持续时间、函数、延迟
  • transition-timing-function:过渡时间函数
    • ease 缓慢开始,先加速,后减速
    • ease-in 缓慢开始
    • ease-out 缓慢结束
    • ease-in-out 开始和结束较慢
    • linear 线性
    • cubic-bezier 自定义

# 动画(样式变化)

  • @keyframes 定义关键帧样式
  • animation-name 动画名称,需要绑定在某个元素上
  • animation-duration 持续时间
  • animation-delay 延迟
  • animation-iteration-count 动画运行次数,infinite无限循环
  • animation-direction 动画向前播放、向后播放、交替播放
  • animation-timing-function 和过渡中的速度曲线类似
  • animation-fill-mode 不播放动画时元素的样式
  • animation 属性简写

实例

/* 动画代码 */
@keyframes example {
  from {background-color: red;}
  to {background-color: yellow;}
}

/* 向此元素应用动画效果 */
div {
  width: 100px;
  height: 100px;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
}

# 多列

  • column-count 规定元素被划分的列数
  • column-gap 规定列之间的间隔
  • column-rule 分割线样式

# 变量

var()函数,用于插入CSS变量的值,复用颜色,易于修改

/*全局变量*/
:root {
  --blue: #1e90ff;
  --white: #ffffff;
}

.container {
  color: var(--blue);
  background-color: var(--white);
  padding: 15px;
}

button {
  --blue: #0000ff;
  background-color: var(--white);
  color: var(--blue);
  border: 1px solid var(--blue);
  padding: 5px;
}

可以使用JS访问CSS变量

# 媒体查询

CSS2引入了@media规则

媒体类型

描述
all 所有媒体类型
print 打印机
screen 计算机屏幕、平板、智能手机
speech 屏幕阅读器

媒体查询语法:

@media not|only mediatype and (expressions) {
  CSS-Code;
}

实例

@media screen and (min-width:480px){
    body {
        background-color:lightgreen;
    }
}

# flexbox

flex容器属性:

  • flex-direction 堆叠方向,默认从左到右
  • flex-wrap 是否换行
  • felx-flow 是上面两个属性的简写
  • justify-content 主轴对齐
    • center 居中
    • flex-start 从容器开始
    • flex-end 从容器结束
    • space-around 前后、之间有空格
    • space-between 之间有空格
  • align-items 次轴对齐
    • center 居中
    • flex-start
    • flex-end
    • baseline 文本基线对齐
  • align-content 多行的时候 纵向对齐方式

子项目属性:

  • order flex项目的顺序
  • flex-grow 相对其他项目增长多少
  • flex-shrink 相对其他项目收缩多少
  • flex-basis flex项目初始长度
  • flex
  • align-self 规定单个项目的对齐方式
Last Updated: 1/6/2025, 9:00:23 AM