目录
一、列表页
1.1导航条
1.2主题区域
1.2.1个人信息框
1.2.2 内容区
二、登录页
三、详情页
一、列表页
整体布局如下:
1.1导航条
导航条分为三块,整体都设置id为导航栏,然后左右分为导航栏左和导航栏右。左边靠左,右边靠右。再在开头加入一张图片。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客列表页</title>
<link rel="stylesheet" href="css/layout.css">
<link rel="stylesheet" href="css/list.css">
</head>
<body>
<div id="导航栏">
<div id="导航栏左">
<div id="logo">
<img src="img/logo1.jpg">
</div>
<div id="name">
我的博客系统
</div>
</div>
<div id="导航栏右">
<a href="#">主页</a>
<a href="#">写博客</a>
<a href="#">登录</a>
</div>
</div>
</body>
</html>
首先我们需要把整个框架靠上整个浏览器页面,否则正常是会有空格的,使左右上下都没有空隙,处于一个盒子中。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
然后使小图片变小设置50px像素。
div#logo img {
height: 50px;
}
然后使导航条中的a标签变为白色,去掉下划线。
div#导航栏 a {
color: #eee;
text-decoration: none;
}
导航条分为左右,需要让一边靠左一边靠右在父元素上设置display: flex。弹性布局:两个资源在主轴上justify-content: space-between;使导航栏出现左右两侧分区。先设置一个弹性布局:display: flex;设置颜色宽高之类的。padding-left: 100px;padding-right: 100px;使导航栏和左右有100px像素的间距。
div#导航栏 {
background-color: rgba(0, 0, 0, .4);
color: #eee;
display: flex;
width: 100%;
height: 60px;
align-items: stretch;
justify-content: space-between;
padding-left: 100px;
padding-right: 100px;
}
然后呢继续设置弹性布局,需要使图片和文字在一行。display: flex;align-items: center;
然后需要让图片和文字、文字和文字之间有距离需要增加一个宽度,调节弹性布局的主轴:justify-content: space-between;然后再设置宽度。
div#导航栏左 {
display: flex;
align-items: center;
width: 220px;
justify-content: space-between;
}
div#导航栏右 {
display: flex;
align-items: center;
width: 220px;
justify-content: space-between;
}
然后使图标设置圆形border-radius: 50%;然后让被遮挡的部分都不显示:overflow:hidden;
div#logo {
width: 50px;
height: 50px;
border-radius: 50%;
overflow:hidden;
}
1.2主题区域
下图为主体区域的大致样式:
1.2.1个人信息框
<div id="主体区域">
<div id="个人信息">
<div id="avatar">
<img src="img/doge.jpg">
</div>
<div id="username">
佳佳
</div>
<div id="git">
<a href="https://gitee.com">git 仓库地址</a>
</div>
<div id="文章数量区域">
<div id="文章数量左区域">
<div>文章</div>
<div>2</div>
</div>
<div id="文章数量右区域">
<div>分类</div>
<div>1</div>
</div>
</div>
</div>
</div>
孩子选择器 结合 通配符选择器 此处的含义是: div#个人信息所有孩子(不是子孙)选中 。
首先配置个人信息的整体像素为6px。以及图片的像素120px。
还有小图标的形状设定。
div#个人信息 > * {
margin: 6px;
}
div#avatar img {
width: 120px;
}
div#avatar {
width: 120px;
height: 120px;
overflow: hidden;
border-radius: 50%;
}
然后对有链接的文本取消下划线,设置颜色。
div#个人信息 a {
color: #555;
text-decoration: none;
}
设置一个背景,使他滑动屏幕时不移动。
body {
background-image: url(../img/cat.jpg);
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
}
div#个人信息 {
background-color: rgba(255, 255, 255, .8);
border-radius: 12px;
width: 180px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
padding: 12px;
}
然后再设置整体得到颜色,像素,宽度,居中,设置间距等等,在导航条中讲过。
div#文章数量区域 {
display: flex;
text-align: center;
width: 80px;
justify-content: space-between;
}
然后使文章和的分类在同一行,数量对应,再设置宽。
1.2.2 内容区
<div id="内容区">
<ol>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
<li>
<div class="文章信息">
<h2>我的第一篇文章</h2>
<p class="发表时间">2023-01-05 10:19:28</p>
<p class="文章简介">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。一种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor </p>
<div class="功能区">
<a href="#">查看全文 >></a>
</div>
</div>
</li>
</ol>
</div>
div#主体区域 {
display: flex;
align-items: start;
justify-content: center;
padding-right: 100px;
}
然后再把整个区域设置为中间,并设置右侧空白100px像素。
div#内容区 {
background-color: rgba(255, 255, 255, .8);
border-radius: 12px;
width: 1000px;
margin-left: 16px;
}
再将内容区设置离左空白16px像素,设置颜色等。
body {
background-image: url(../img/cat.jpg);
background-size: 100%;
background-repeat: no-repeat;
background-attachment: fixed;
}
设置背景为指定的图片。
div#内容区 ol {
list-style: none;
}
然后取消每一层的标记数字。
div.文章信息 {
margin: 30px;
}
div.文章信息 > * {
margin: 12px;
}
div.文章信息 h2 {
text-align: center;
}
使每个小文章有30px像素。看的更清晰。让文章下的所有信息像素为12px。让每个文章的标题居中。
div.文章信息 p.发表时间 {
text-align: center;
color: #c52813;
}
div.文章信息 p.文章简介 {
text-indent: 2em;
}
让发表时间也居中并且置为红色。让文章简介首行留出两字符。
div.文章信息 div.功能区 {
display: flex;
align-items: center;
justify-content: center;
}
div.文章信息 div.功能区 a {
border: 2px solid #000;
padding: 5px 15px;
color: #000;
text-decoration: none;
}
然后让功能区在块中处于中间位置,然后利用border: 2px solid #000给链接处加一个块围住,使块为白色,将块设置一个宽和高,然后取消链接的下划线。
list.css代码:
div#内容区 ol {
list-style: none;
}
div.文章信息 {
margin: 30px;
}
div.文章信息 > * {
margin: 12px;
}
div.文章信息 h2 {
text-align: center;
}
div.文章信息 p.发表时间 {
text-align: center;
color: #c52813;
}
div.文章信息 p.文章简介 {
text-indent: 2em;
}
div.文章信息 div.功能区 {
display: flex;
align-items: center;
justify-content: center;
}
div.文章信息 div.功能区 a {
border: 2px solid #000;
padding: 5px 15px;
color: #000;
text-decoration: none;
}
layout.css代码:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-image: url(../img/cat.jpg);
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
}
div#logo img {
height: 50px;
}
div#导航栏 a {
color: #eee;
text-decoration: none;
}
div#导航栏 {
background-color: rgba(0, 0, 0, .4);
color: #eee;
display: flex;
width: 100%;
height: 60px;
align-items: stretch;
justify-content: space-between;
padding-left: 100px;
padding-right: 100px;
}
div#导航栏左 {
display: flex;
align-items: center;
width: 220px;
justify-content: space-between;
}
div#导航栏右 {
display: flex;
align-items: center;
width: 220px;
justify-content: space-between;
}
/* 孩子选择器 结合 通配符选择器 */
/* 此处的含义是: div#个人信息所有孩子(不是子孙)选中 */
div#个人信息 > * {
margin: 6px;
}
div#个人信息 {
background-color: rgba(255, 255, 255, .8);
border-radius: 12px;
width: 180px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
padding: 12px;
}
div#logo {
width: 50px;
height: 50px;
border-radius: 50%;
overflow:hidden;
}
div#个人信息 a {
color: #555;
text-decoration: none;
}
div#avatar {
width: 120px;
height: 120px;
overflow: hidden;
border-radius: 50%;
}
div#avatar img {
width: 120px;
}
div#文章数量区域 {
display: flex;
text-align: center;
width: 80px;
justify-content: space-between;
}
div#内容区 {
background-color: rgba(255, 255, 255, .8);
border-radius: 12px;
width: 1000px;
margin-left: 16px;
}
div#主体区域 {
display: flex;
align-items: start;
justify-content: center;
padding-right: 100px;
}
body {
background-image: url(../img/cat.jpg);
background-size: 100%;
background-repeat: no-repeat;
background-attachment: fixed;
}
二、登录页
登录页大致就长成这样,然后根据这个进行设计。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客列表页</title>
<link rel="stylesheet" href="css/login.css">
</head>
<body>
<div id="导航栏">
<div id="导航栏左">
<div id="logo">
<img src="img/logo1.jpg">
</div>
<div id="name">
我的博客系统
</div>
</div>
<div id="导航栏右">
<a href="#">主页</a>
<a href="#">写博客</a>
<a href="#">登录</a>
</div>
</div>
<div id="主体区域">
<div id="登录框">
<form>
<h1>登录</h1>
<div id="输入区域">
<div id="用户名区域" class="输入">
<label>
<span>用户名</span>
<input type="text" name="username">
</label>
</div>
<div id="密码区域" class="输入">
<label>
<span>密码</span>
<input type="password" name="password">
</label>
</div>
<div id="按钮区域">
<button>提交</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-image: url(../img/cat.jpg);
background-size: 100%;
background-repeat: no-repeat;
background-attachment: fixed;
}
div#logo img {
height: 50px;
}
div#导航栏 a {
color: #eee;
text-decoration: none;
}
div#导航栏 {
background-color: rgba(0, 0, 0, .4);
color: #eee;
display: flex;
width: 100%;
height: 60px;
align-items: stretch;
justify-content: space-between;
padding-left: 100px;
padding-right: 100px;
}
div#导航栏左 {
display: flex;
align-items: center;
width: 220px;
justify-content: space-between;
}
div#导航栏右 {
display: flex;
align-items: center;
width: 220px;
justify-content: space-between;
}
div#logo {
width: 50px;
height: 50px;
border-radius: 50%;
overflow:hidden;
}
div#主体区域 {
height: calc(100vh - 60px);
display: flex;
align-items: center;
justify-content: center;
}
div#登录框 {
background-color: rgba(255, 255, 255, .8);
width: 500px;
padding: 16px;
font-size: 1.5em;
border-radius: 16px;
}
div#登录框 h1 {
text-align: center;
}
div#用户名区域, div#密码区域, div#按钮区域 {
margin: 16px 0;
display: flex;
}
.输入 label {
display: flex;
align-items: stretch;
justify-content: space-between;
}
.输入 span {
width: 80px;
}
.输入 input {
width: 388px;
height: 100%;
font-size: 1.5em;
padding: 6px 15px;
border: none;
background-color: #fff;
outline: none;
border-radius: 8px;
}
button {
width: 100%;
font-size: 1.5rem;
background-color: #531748;
color: #fff;
border: none;
border-radius: 8px;
padding: 6px 0;
}
三、详情页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客列表页</title>
<link rel="stylesheet" href="css/layout.css">
<link rel="stylesheet" href="css/detail.css">
</head>
<body>
<div id="导航栏">
<div id="导航栏左">
<div id="logo">
<img src="img/logo1.jpg">
</div>
<div id="name">
我的博客系统
</div>
</div>
<div id="导航栏右">
<a href="#">主页</a>
<a href="#">写博客</a>
<a href="#">登录</a>
</div>
</div>
<div id="主体区域">
<div id="个人信息">
<div id="avatar">
<img src="img/doge.jpg">
</div>
<div id="username">
比特老陈
</div>
<div id="git">
<a href="https://gitee.com/peixinchen2">git 仓库地址</a>
</div>
<div id="文章数量区域">
<div id="文章数量左区域">
<div>文章</div>
<div>2</div>
</div>
<div id="文章数量右区域">
<div>分类</div>
<div>1</div>
</div>
</div>
</div>
<div id="内容区">
<h1>我的第一篇文章</h1>
<p class="发表时间">2023-01-05 11:18:23</p>
<p id="第1段" class="文章段">深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。</p>
<p id="第2段" class="文章段">种计算图生成是基于 trace tensor 的,跟踪 tensor 的执行路径。tensor 执行时,基于函数重载,可以落到支持 tensor 计算的框架自定义函数,该函数一般是 c++ 层的。c++ 层的自定义函数中,功能是用于生成一个 Operation 的符号表达。比如一个对于加法运算,trace 就是记录一个符号化的加法算子。如此一连串的运算就被转换了符号化的计算图。</p>
<p id="第3段" class="文章段">另外一种计算图生成是基于 AST(抽象语法树) 解析的。在代码执行前,直接根据 Python 文本代码得到 Python AST,然后根据 AST 来翻译成计算图(也叫做中间代码 IR)。</p>
<p id="第4段" class="文章段">Python(特指 CPython)解释器执行,第一阶段会先把 Python 源码解析成 AST,第二阶段根据 AST 生成和优化 ByteCode(字节码),第三阶段在虚拟机中执行 ByteCode。</p>
<p id="第5段" class="文章段">基于 AST 解析的计算图生成,发生在这里的第一阶段;基于 trace tensor 的计算图生成,发生在第三阶段之后。</p>
</div>
</div>
</body>
</html>
详情页简单些来就更简单了,延续列表页大部分的代码,左侧的个人信息以及导航条都延续,只更改内容区。
div#内容区 {
padding: 16px;
/* 100vh:浏览器的高度 */
min-height: calc(100vh - 60px);
}
div#内容区 h1 {
text-align: center;
margin-bottom: 12px;
}
div#内容区 p.发表时间 {
text-align: center;
color: #c52813;
margin-bottom: 12px;
}
div#内容区 p.文章段 {
text-indent: 2em;
line-height: 2em;
margin-bottom: 12px;
}