1)旋转函数。
在 CSS3 中,使用 rotate 函数能够让指定的元素对象绕原点旋转,主要在二维空间内进行操作。
其语法格式如下所示:
transform: rotate(角度); /*元素按照指定角度旋转*/
这里的角度可以是正值也可以是负值。正负值意味着什么呢?
同学们可能已经猜到了,正负值意味着不同的旋转方向,规定参数为正时,顺时针旋转;参数为负时,逆时针旋转。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width:50px;
height:50px;
margin:20px;
display:inline-block;
background-color:chartreuse;
}
.c1{
background-color:#ffe6e6;
transform:rotate(60deg); /*右旋60°*/
}
.c2{
background-color:#a7c5eb;
transform:rotate(-60deg);/*左旋60°*/
}
</style>
</head>
<body>
<div class="c1"></div>
<div></div>
<div class="c2"></div>
</body>
</html>
rotateX 让指定元素围绕横坐标(X 轴)旋转。其使用格式如下所示:
transform: rotateX(角度);
rotateY 让指定元素围绕纵坐标(Y 轴)旋转。其实用格式如下所示:
transform: rotateY(角度);
<!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>
.c1 {
transform: rotateX(70deg);
}
.c2 {
transform: rotateX(180deg);
}
.c3 {
transform: rotateY(45deg);
}
.c4 {
transform: rotateY(180deg);
}
</style>
</head>
<body>
<div>
<img
src="https://labfile.oss.aliyuncs.com/courses/3773/icons8-animal-64.png"
/>
<img
src="https://labfile.oss.aliyuncs.com/courses/3773/icons8-animal-64.png"
class="c1"
/>
<img
src="https://labfile.oss.aliyuncs.com/courses/3773/icons8-animal-64.png"
class="c2"
/>
</div>
<div>
<img
src="https://labfile.oss.aliyuncs.com/courses/3773/icons8-animal-85.png"
/>
<img
src="https://labfile.oss.aliyuncs.com/courses/3773/icons8-animal-85.png"
class="c3"
/>
<img
src="https://labfile.oss.aliyuncs.com/courses/3773/icons8-animal-85.png"
class="c4"
/>
</div>
</body>
</html>
沿 X 轴旋转 180deg 的过程如下所示:
等于纵向缩放
沿 Y 轴旋转 180deg 的过程如下所示:
等于横向缩放
(2)移动函数。
translate() 函数能够重新定位元素坐标,该函数包含两个参数值,分别用来定位 X 轴和 Y 轴的新坐标。
其语法格式为:
transform: translate(移动值); /*元素按照指定值沿着 X 轴和 Y 轴移动*/
transform: translateX(移动值); /*元素按照指定值沿着 X 轴移动*/
transform: translateY(移动值); /*元素按照指定值沿着 Y 轴移动*/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width:50px;
height:50px;
background-color:#dfabff
}
.c1{
background-color: #844e4e;
transform: translateX(20px);
}
.c2{
background-color:#985454;
transform:translateY(20px);
}
</style>
</head>
<body>
<div></div>
<div class="c1"></div>
<div class="c2"></div>
</body>
</html>
页面上有两个 div 元素块,使用 transform: translateX(20px) 让第一个元素块向 X 轴移动 20 个像素;使用 transform: translateY(30px) 让第二个元素块向 Y 轴移动 30 个像素。
使用 translateX 函数时如果为正值则向右移动,反之向左移动;使用 translateY 函数时如果为正值则向下移动,反之向上移动。
(3)缩放函数。
scale() 函数能够缩放元素大小,该函数包含两个参数,分别用来定义宽和高的缩放比例。
其语法格式为:
transform: scale(缩放倍数); /*元素按照指定值沿着 X 轴和 Y 轴缩放*/
transform: scaleX(缩放倍数); /*元素按照指定值沿着 X 轴缩放*/
transform: scaleY(缩放倍数); /*元素按照指定值沿着 Y 轴缩放*/
<!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>
div {
width: 50px;
height: 50px;
margin: 30px;
}
.c1 {
background-color: rgba(179, 153, 38, 0.651);
}
/*沿着 X 和 Y 轴进行缩放*/
.c2 {
background-color: #9088d4;
transform: scale(2);
}
/*沿着 X 轴进行缩放*/
.c3 {
background-color: #ffe5b9;
transform: scaleX(2);
}
/*沿着 Y 轴进行缩放*/
.c4 {
background-color: #1c8181;
transform: scaleY(2);
}
</style>
</head>
<body>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3"></div>
<div class="c4"></div>
</body>
</html>
(4)倾斜函数。
skew() 函数能够让元素倾斜显示,该函数包括两个参数值,分别用于定义 X 轴和 Y 轴的倾斜角度。
其语法格式为:
skew(X 轴角度, Y 轴角度)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width:100px;
height:50px;
margin:30px;
background-color:#9088d4;
}
.c2{
background-color:rgb(35, 243, 160);
transform:skew(50deg, 15deg);
}
</style>
</head>
<body>
<div class="c1"></div>
<div class="c2"></div>
</body>
</html>
(5)矩阵变换函数。
matrix() 是矩阵函数,调用该函数可以非常灵活的实现各种变形效果,它包括 6 个参数值,形成了一个 3×3 的矩阵。通过对矩阵值的定义来实现元素的变形效果。
其语法格式为:
matrix(<number>,<number>,<number>,<number>,<number>,<number>)
在 matrix 函数中,前面四个参数是用来描述线性变换的值,而后两个参数使用来描述应用这个线性变换的方式。
概念听起来好复杂,不要慌!我们不需要重新学一遍数学,只要记住下面这一点就可以了。matrix 的参数我们可以按照如下方式来理解:
matrix(scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY())
参数 1 和参数 4 相当于是缩放函数;参数 2 和参数 3 相当于是倾斜函数;参数 5 和 参数 6 是移动函数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width:200px;
height:100px;
}
.container{
border: 1px solid rgb(186, 233, 19);
}
.matrix{
background-color:#998dfe;
transform:matrix(1, 0, 0, 1, 50, 50);
}
</style>
</head>
<body>
<div class="container">
<div class="matrix"></div>
</div>
</body>
</html>
TML中的span标记和div标记
在使用css排版网页时,span和div常用的两个的标记。利用这个两个标记,加上css样式控制,可以实现很复杂的网页效果,下面为大家详细讲解一下他们区别和使用。
span和div概念区别和相似点
div标记是html3.0时提出来的,但是不常用,直到css的出现才慢慢变得应用广泛起来。HTML4.0以后span才被引入,主要针对样式表设计的。div与之间可以理解成一个容器,这个容器可以放段落、标题、图片等各种HTML元素。div与之前的内容可看做一个独立内容的对象,对于css的控制。先需要对div控制,再对div中各标记的元素再进行控制。
span标记与div标记一样,作为容器标记广泛应用在HTML中。span与中间同样可以容纳各种html元素,span与中间也可以视为独立的对象。span和div两个标记都可以独立出区块,这一点没有很大的区别。
span和div功能区别
span和div区别在于,div是一个块级元素,它包含的元素会自动换行。而span是行内元素,在它的前后不会换行。span没有结构上的意义,只是单纯的应用样式,其他元素不适合时,就可以使用span元素。span可以作为div的子元素,但div不能是span的子元素,如果出现span中出现div不符合ws3c的页面标准。
span和div使用区别
span元素宽度是被包围的内容宽度决定,不建议给span设置宽度属性width,可以给span设置margin值,设置与父元素之前的距离。span可以通过css声明(display:block)转换为块元素,想对一行中的文字或图片单独设置样式,而又由不需要换行的条件下又不影响其他行内其他内容,span可以很好解决这些问题。
每天一个知识点,每日寄语“不论你在什么时候开始,重要的是开始之后就不要停止。”
能逻辑介绍:
管理员通过数据库添加部门数据,前端通过触发部门管理icon,列出已经添加的部门数据。
1:首先创建数据表信息,
我们重点是学会整体思路,避免过多参数复杂了理解,简单点,就先创建两个字段,一个部门id,一个部门名称。
我们在其插入几条数据,数据库建表语句:
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
INSERT INTO `department` VALUES (1, '部门1');
INSERT INTO `department` VALUES (2, '部门2');
INSERT INTO `department` VALUES (3, '部门3');
INSERT INTO `department` VALUES (4, '部门4');
INSERT INTO `department` VALUES (5, '部门5');
INSERT INTO `department` VALUES (6, '部门6');
SET FOREIGN_KEY_CHECKS = 1;
前端在templates下创建homepage.html。用于加载首页。
首页布局暂定为左右结构,也就是模块按钮定义在侧边栏位置,右侧区域动态加载各个模块内容。
在homepage.html实现两个div:
<div class="sidebar">
<a href="#" class="menu-item" id="home"><i class="fa fa-home"></i> 首页</a>
<a href="#" class="menu-item" id="departments"><i class="fa fa-building"></i> 部门管理</a>
</div>
<div class="content">
<h1 class="page-title">欢迎来到自动化测试平台</h1>
<div id="content-section">
<!-- 动态内容被加载到这里 -->
</div>
</div>
点击部门管理后请求后端路由函数/departments.
后端在index.py函数内创建departments路由用于转发到部门管理页面。
@app.route('/departments')
def departments():
return render_template('departments.html')
然后在前端在templates下创建继续departments.html前端界面,此界面
通过ajax请求后台数据信息,加载到前端界面进行展示。
定义一个table,其中包含一个tbody和一个thead。
thead是表格头部信息,tbody对应头部信息的真实数据。
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>部门 ID</th>
<th>部门名称</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
ajax请求函数实现:
<script>
$(document).ready(function () {
$(document).ready(function () {
$.ajax({
url: '/get-departments',
type: 'GET',
success: function (res) {
let departments = res.departments;
for (let department of departments) {
$('table tbody').append(`
<tr>
<td>${department.id}</td>
<td>${department.name}</td>
</tr>
`);
}
},
error: function (err) {
console.error('获取部门数据失败', err);
}
});
});
});
</script>
ajax请求的url为后端请求数据路由,因为是向服务端获取数据显示,请求type为get。
此时在后端casecommon.py实现/get-departments路由函数。
此函数需要连接数据库,执行sql查询,将所有数据转换为json格式,返回给前端用于展示。
为了后面查询数据,这里我将数据库查询封装在dbbase.py文件中。此文件类名为DBbase。
数据库连接操作为:
查询sql封装为:
/get-departments路由函数具体实现为:
from flask import jsonify
from app.dbbase import DBbase
db = DBbase()
from app import app
@app.route('/get-departments', methods=['GET'])
def get_departments():
# mycursor.execute("SELECT id, name FROM department")
# departments = mycursor.fetchall()
sql = "SELECT id, name FROM department"
departments = db.select_data(sql)
departments_list = [{'id': d[0], 'name': d[1]} for d in departments]
return jsonify({'departments': departments_list})
将查询到的整个departments重新组装数据,每条部门数据装在列表中。
原始查询后departments数据形式{{},{},{}}。组装后的形式为
{ "departments":
[ {"id": 1, "name": "部门1"}, {"id": 2, "name": "部门2"}, {"id": 3, "name": "部门3"}, ... ]
}。
将此数据赋值给departments_list。在通过jsonify转换为json格式进行返回给前端。
那么这整个数据的key即为departments,value即为一个装载每条部门信息数据的列表。
前端接收到数据后,jquary会默认将其转换为前端可识别的数据形式。这时候在将数据进行拆分,定义一个res参数用来接收全部数据,在定义一个参数将value值全部获取赋给departments。此时departments数据结构为
[ {"id": 1, "name": "部门1"}, {"id": 2, "name": "部门2"}, {"id": 3, "name": "部门3"}, ...]
遍历departments,for-of循环遍历res.departments数组,每次循环中的变量department都是一个表示部门的对象,你可以直接访问department.id和department.name来获取部门的ID和名称。在找到界面所有的tbody将其append进去。
在函数的主运行入口定义以下内容:
from http import server
from urllib import request
from app import app
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True,port=9555)
server.logger.info('info log')
server.logger.info('【请求的方法】{}【请求路径】{}【请求地址】{}'.format(request.method, request.path, request.remote_addr))
运行后界面展示:
整体部门管理完整实现流程如上。
下一节:项目管理模块实现,敬请期待。
*请认真填写需求信息,我们会在24小时内与您取得联系。