2019-12-03 vue中竖形时间轴(左右两侧都有字)实现 css

html-css08

2019-12-03 vue中竖形时间轴(左右两侧都有字)实现 css,第1张

实现效果:

在dialog弹出框中实现竖形时间轴,如上图,难点在于左侧的时间和圆点要根据右侧的内容的长度来定位,可根据固定宽度,根据长度/宽度来计算几行,来确定具体的位置。

下面的实现不是上述原理,是规定数据格式,用css样式实现的

数据格式:

detailContent: [

{ code: '已审核待审批 ', des: ' 2019-11-18 09:44', name: 'zhangsan-张三',

detailContents: [

{ code: '审核结论:', des: '0-给付或部分给付' },

{ code: '给付类型:', des: '01-协议给付;' },

{ code: '原因明细:', des: '与出险人协商结果;' },

{ code: '特殊备注:', des: '无;' },

{ code: '案件标识:', des: '11-普通案件;' },

{ code: '审核意见:', des: '根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据' }

] },

{ code: '已立案待审核 ', des: ' 2019-11-18 09:44', name: 'wangwu-王五',

detailContents: [

{ code: '立案结论:', des: '01-立案通过' }

] },

{ code: '审核回退立案 ', des: '2019-11-18 09:44', name: 'zhangsan-张三',

detailContents: [

{ code: '审核结论:', des: 'a-案件回退' },

{ code: '回退原因:', des: '03-受益人身份确认有误或待完善' },

{ code: '特殊备注:', des: '此为重大问题;' },

{ code: '案件标识:', des: '11-普通案件;' },

{ code: '审核意见:', des: '根据根原因根据XXX' }

] },

{ code: '审批回退审核 ', des: '2019-11-18 09:44', name: 'wangwu-王五',

detailContents: [

{ code: '审批结论:', des: '1-不同意' },

{ code: '不同意原因:', des: '05-索赔文件所示事故非有效期限范围;' },

{ code: '不同意依据:', des: '金额理算不正确,烦请确认;' },

{ code: '审批意见:', des: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' }

] },

{ code: '已审核待审批 ', des: '2019-11-18 09:44', name: 'zhangsan-张三',

detailContents: [

{ code: '审核结论:', des: '1-全部拒付' },

{ code: '拒付原因:', des: '03-不如实告知;' },

{ code: '拒付依据:', des: '身份信息虚报;' },

{ code: '特殊备注:', des: '此为重大问题;' },

{ code: '案件标识:', des: '11-普通案件;' },

{ code: '审批意见:', des: '根据根原因根据XXX' }

] },

{ code: '审批回退审核 ', des: '2019-11-18 09:44', name: 'wangwu-王五',

detailContents: [

{ code: '审批结论:', des: '1-不同意' },

{ code: '不同意原因:', des: '05-索赔文件所示事故非有效期限范围;' },

{ code: '不同意依据:', des: '金额理算不正确,烦请确认;' },

{ code: '审批意见:', des: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' }

] },

{ code: '已审核待审批 ', des: '2019-11-18 09:44', name: 'zhangsan-张三',

detailContents: [

{ code: '审核结论:', des: '0-给付或部分给付' },

{ code: '给付类型:', des: '01-协议给付;' },

{ code: '原因明细:', des: '与出险人协商结果;' },

{ code: '特殊备注:', des: '无;' },

{ code: '案件标识:', des: '11-普通案件;' },

{ code: '审核意见:', des: '根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据根原因根据' }

] },

{ code: '已立案待审核 ', des: '2019-11-18 09:44', name: 'zhangsan-张三',

detailContents: [

{ code: '立案结论:', des: '01-立案通过' }

] },

{ code: '已报案待立案 ', des: '2019-11-18 09:44', name: 'zhangsan-张三' }

]

HTML:

<div class="main">

<ul class="cbp_tmtimeline">

<li>

  <div v-for="(item, index) in detailContent" :key="index" :class="{'cbp_div': index === (detailContent.length - 1)}">

<div class="cbp_left">

<span>{{item.code}}</span>

<span>{{item.des}}</span>

</div>

<div class="cbp_tmlabel">

<h3>zhangsan-张三</h3>

<div class="cbp_tmicon"></div>

<div v-for="(item, index) in item.detailContents" :key="index" >

<span>{{item.code}}</span>

<span>{{item.des}}</span>

</div>

</div>

</div>

</li>

</ul>

</div>

style样式:

<style>

.cbp_div {

height: 20px

width:570px

}

.cbp_left {

width: 120px

color: black

font-size: 1.2em

font-weight: 300

line-height: 1.4

margin-bottom: -60px

}

.main

{

width: 90%

max-width: 69em

margin: 0 auto

padding: 0 1.875em 3.125em 1.875em

}

.cbp_tmtimeline

{

width: 570px

margin: 40px 0 0 0

padding: 0

list-style: none

position: relative

}

/* The line */

.cbp_tmtimeline:before

{

content: ''

position: absolute

top: 0

bottom: 0

width: 3px

background: #b8cad6

left: 25%

margin-left: -11px

}

.cbp_tmtimeline >li

{

position: relative

}

.cbp_tmtimeline >li .cbp_tmlabel

{

margin: -65px 0 15px 25%

color: black

padding: 0 1em

font-size: 1.2em

position: relative

border-radius: 5px

}

.cbp_tmtimeline >li .cbp_tmicon

{

width: 18px

height: 18px

font-family: 'ecoico'

font-style: normal

font-weight: normal

font-variant: normal

position: absolute

color: #fff

background: #46a4da

border-radius: 50%

box-shadow: 0 0 0 3px #afdcf8

left: 26%

top: 0

margin: 0 0 0 -130px

}

</style>

当浏览器从服务器接收到页面的HTML响应时,在屏幕上绘制像素之前需要采取许多步骤。浏览器为页面的初始绘制需要执行的顺序称为“ 关键渲染路径 ” (CRP)。

CRP知识对于了解如何改善站点性能非常有用。CRP分为6个阶段-

DOM( 文档对象模型 )树是完全解析的HTML页面的对象表示。从根元素开始, <html>将为页面上的每个元素/文本创建节点。嵌套在其他元素中的元素表示为子节点,每个节点都包含该元素的完整属性。例如, <a>元素将具有 href 与其节点关联的属性。

以这个样本文件为例-

这将创建以下DOM树-

关于HTML的一件好事是它可以部分执行。无需加载完整的文档即可使内容开始出现在页面上。但是,其他资源(CSS和JavaScript)可能会阻止页面的呈现。

CSSOM( CSS对象模型 )是与DOM关联的样式的对象表示。它以与DOM相似的方式表示,但包括每个节点的关联样式,无论它们是显式声明的还是隐式继承的。

在上述 style.css 文档的文件中,我们具有以下样式-

这将创建以下CSSOM树-

CSS被视为 “渲染阻止资源” 。这意味着如果不首先完全解析资源,则无法构建 渲染树 。与HTML不同,由于CSS具有继承级联性质,因此不能部分使用。稍后在文档中定义的样式可以覆盖和更改先前定义的样式。因此,如果我们在解析整个样式表之前开始使用样式表中较早定义的CSS样式,则可能会遇到应用了错误CSS的情况。这意味着,在我们进入下一阶段之前,必须对CSS进行完全解析。

CSS文件仅适用于当前设备,才被视为渲染阻止。该 <link rel="stylesheet">标签可以接受一个 media 属性,我们可以在其中指定任何媒体查询其内的样式应用到。例如,如果我们有一个样式表,其media属性为 orientation:landscape ,并且我们正在以纵向模式查看页面,则该资源将不被视为渲染阻止。

CSS也可以是 “脚本阻止” 。这是因为JavaScript文件必须等待CSSOM构造完成后才能运行。

JavaScript被视为 “解析器阻止资源” 。这意味着HTML文档本身的解析已被JavaScript阻止。

当解析器到达一个 <script>标签时,无论是内部标签还是外部标签,它都会停止获取(如果是外部标签)并运行它。这就是为什么,如果我们有一个JavaScript文件引用了文档中的元素,则必须将其放在该文档的外观之后。

为了避免JavaScript被解析器阻止,可以通过应用 async 属性异步加载它。

渲染树是DOM和CSSOM的组合。它是一棵树,代表最终将在页面上呈现的内容。这意味着它仅捕获可见的内容,并且不包括例如使用CSS被CSS隐藏的元素 display: none 。

使用上面的示例DOM和CSSOM,将创建以下渲染树-

布局是决定视口大小的要素,它为依赖于它的CSS样式(例如百分比或视口单位)提供了上下文。视口大小由文档头中提供的meta视口标签确定,或者,如果未提供标签,则使用默认视口宽度980px。

例如,最常见的元视口值是将视口大小设置为与设备宽度相对应-

如果用户在宽度为例如1000px的设备上访问网页,则尺寸将基于该单位。视口的一半将是500px,10vw将是100px,依此类推。

最后,在“绘画”步骤中,页面的可见内容可以转换为要在屏幕上显示的像素。

绘制步骤需要花费多少时间取决于DOM的大小以及所应用的样式。某些样式比其他样式需要执行更多工作。例如,复杂的渐变背景图像比简单的纯色背景需要更多的时间。

要查看正在处理的关键渲染路径,我们可以在DevTools中对其进行检查。在Chrome浏览器中,它位于“ 时间轴” 标签下(在Canary中,不久后成为Chrome稳定版,它已重命名为 Performance )。

举例来说,我们上面的示例HTML(带有添加的 <script>标记)-

如果我们查看页面加载的事件日志,就会得到以下信息:

基于此信息,我们可以决定如何优化“关键渲染路径”。

Understanding the Critical Rendering Path

IE是个毛病很多的浏览器。特别是IE6以及之前的版本。

做出页面来,之后,需要在IE6中做hack,已修正不正常的显示效果。

滚动字幕用marquee,IE6可以支持。

滑动门也可以支持,检查一下CSS有没有问题。