最近在工作中遇到了一些不常用的布局,很多使用 CSS table 属性,并结合 ::before,::after 伪元素完成了,使得 HTML 的结构相对更简单,更具有语义性。当 HTML 结构越清晰,越有规律时,便于阅读,循环套数据时也可以少很多的判断。

一、有下面这样一个设计,上面是标题,中间是流程图,下面是电话。

很明显:

1. 这个设计图中的所有内容都是居中显示的;

2. 标题部分,分为了中文和英文,下面有两条线,还有一个菱形;

3. 中间部分,流程的每一项,除了最后一项外,每一项下面都有一个箭头指向;

4. 电话部分,左右两边各有一条线,且各有一个菱形;

这个设计图的实现中,现在我们不使用图片,依靠 CSS 中 table,定位,伪元素来完成。

  • 首先,根据效果图写出没有多余的标签的 HTML 结构:

注:其它 li 标签和第一个 li 标签的结构一致,只是 icon 类名和文本不同。

  • 思考:

.heading 的布局

1. 宽度不能固定,得根据文本内容来适应;2. 在父容器中需要水平居中; 3. 线的宽度可以根据内容的宽度来确定; 4. 菱形可以通过正方形顺时针或者逆时针旋转 45° 获得。

.heading {
position: relative;
display: table;
margin: 0 auto 40px;
padding: 0 80px 18px;
color: #333;
&::before,
&::after {
content: "";
position: absolute;
bottom:;
width: calc(50% - 20px);
height: 1px;
background-color: #999;
}
&::before {
left:;
}
&::after {
right:;
}
strong {
display: block;
text-align: center;
}
.cn {
color: #333;
line-height: .9;
font-family: "webfont", Arial, sans-serif; // 这里使用的网络安全字体
font-weight: normal;
font-size: 20px;
margin-bottom: 10px;
}
.en {
color: #666;
font-family: "webfont", Arial, sans-serif;
font-weight: lighter;
text-transform: capitalize;
font-size: 14px;
line-height:;
&::after {
content: "";
position: absolute; // 这里的布局定位已祖先元素含有非 static 定位的元素进行绝对定位
bottom: -2px;
left: 50%;
width: 5px;
height: 5px;
background-color: #999;
transform: translateX(-50%) rotate(45deg);
}
}
}

注:

1. .heading 使用 table 显示,不同于 block 显示的元素宽度跟随父元素默认 100%。也不同于 inline-block 显示不能通过设置 margin 实现水平居中。

2. .heading 的 padding-right 和 padding-left 使用 80px,这个 。heading 的宽度就会比内容宽度多出 160px,左右两条线通过定位 left: 0 和 right: 0 不必计算。

3. 左右的两条线宽度使用 (50% - 20px) 留出了 40px 的空白,菱形需要占位。

4. strong 设置为 block 显示,它的宽度就与父元素 .heading 一样,父元素和其两个子元素中宽度较大的那个一样。

5. 在第二个 strong 的伪元素 ::after 中设置了绝对定位,它会相对于祖先元素中(从父元素一层一层往上找)非 static 定位的元素进行定位,这里是相对于 .heading 进行定位。并且设置 left: 50%, transform:translateX(-50%) rotate(46deg) 让其在水平位置上居中,并且旋转 45°。

2. .body 的布局

1. 流程图每一项宽度不能固定,得根据文本内容来适应;2. 在父容器中需要水平居中; 3. 箭头可以根据一条竖线加上一个箭头来合成。

li {
position: relative;
display: table;
margin-right: auto;
margin-left: auto;
height: 40px;
line-height: 38px;
padding-right: 35px;
padding-left: 35px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 20px;
font-size: 14px;
color: #333;
&:not(:last-of-type) {
margin-bottom: 32px;
&::before { // 箭头的竖线
content: "";
position: absolute;
bottom: -26px;
left: 50%;
transform: translateX(-50%);
width: 1px;
height: 20px;
background-color: #999;
}
&::after { // 箭头
content: "";
position: absolute;
bottom: -26px;
left: 50%;
transform: rotate(-45deg);
transform-origin: left bottom;
width: 7px;
height: 7px;
border-bottom: 1px solid #999;
border-left: 1px solid #999;
}
}
i {
font-size: 1.3em;
color: #a57e60;
margin-right: 10px;
}
}

3. .join-us 的布局同 .heading 相似。

拓展:

table 属性的用法远不止这些

我们最常用到水平垂直布局也可以通过设置元素为单元格样式来实现:

<div class="parent">
<div class="child">我在父元素中水平垂直居中</div>
</div>
.parent {
width: 400px;
height: 200px;
border: 1px solid #f00;
display: table-cell;
text-align: center;
vertical-align: middle;
}

css-table属性运用的更多相关文章

  1. CSS display:table属性用法- 轻松实现了三栏等高布局

    display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以 ...

  2. css table 布局

    使用CSS表格 CSS表格能够解决所有那些我们在使用绝对定位和浮动定位进行多列布局时所遇到的问题.例如,“display:table;”的CSS声明能够让一个HTML元素和它的子节点像table元素一 ...

  3. div+css的属性

    div+css的属性 gCascading Style Sheet 层叠式样式表 ==> 层叠样式表 Internal Style Sheet 内部样式表 External Style Shee ...

  4. CSS expression属性

    expression属性是在IE5版本之后支持使用的,用来把CSS属性和JavaScript脚本关联起来.简单粗暴的说,该属性是用来调用JavaScript代码的. CSS属性后面是一段JavaScr ...

  5. CSS Table(表格)

    CSS Table(表格) 一.表格边框 border 指定CSS表格边框,使用border属性. 下面的例子指定了一个表格的Th和TD元素的黑色边框: table, th, td { border: ...

  6. css display属性详解

    css display属性在对css做layout设计时非常重要,它的值有以下几种: Value Description Play it inline Default value. Displays ...

  7. css Table布局:基于display:table的CSS布局

    两种类型的表格布局 你有两种方式使用表格布局 -HTML Table(<table>标签)和CSS Table(display:table 等相关属性). HTML Table是指使用原生 ...

  8. css table布局

    表格布局有两种方式: 1.HTML Table(<table>标签)和 2. CSS Table(display:table 等相关属性). HTML Table是指使用原生的<ta ...

  9. CSS-W3School:CSS table-layout 属性

    ylbtech-CSS-W3School:CSS table-layout 属性 1.返回顶部 1. CSS table-layout 属性 CSS 参考手册 实例 设置表格布局算法: table { ...

  10. CSS will-change 属性

    介绍 如果你注意到在webkit的浏览器上“flicker”一些CSS操作(尤其是变形和动画方面的)的表现,你很可能之前就注意过硬件加速了 CPU.GPU和硬件加速 硬件加速意味着Graphics P ...

随机推荐

  1. C# 指针操作相关

    C# 指针操作相关 =========================================            // ** 取int 地址 以指针访问指向值 ** //         ...

  2. CSS阴影盒子

    box-shadow:inset 横向偏移量  纵向偏移量  模糊范围  扩展范围  阴影颜色: 1.inset :(可选) 内阴影,不设置inset,表示盒子外部显示一个投影.也可写在最后. 2.横 ...

  3. linux的文件基本属性

    Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定 1.在Linux中我们 ...

  4. PHP 错误解决锦集

    Part1:Maximum execution time of 120 seconds exceeded 120秒运行超时的错误 解决办法: 方法一,修改php.ini文件 max_execution ...

  5. ASP.NET MVC控制器里捕获视图的错误验证信息(ErrorMessage)

    ViewModel类: /// <summary> /// 评论用验证视图 /// </summary> public partial class VCreateShopCom ...

  6. 【基于初学者的SSH】struts2 环境配置

    01:导入Jar包 下载地址:http://struts.apache.org/ 将下好的jar包放导WEB-INF下的lib文件夹下 02:创建Action:com.action.LoginActi ...

  7. ASP.NET MVC传递Model到视图的多种方式总结(一)__通用方式的使用

    有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData ViewModel Tuple 场景: 在视图页面,下拉框选择课程触发事件,分别 ...

  8. EF 调用oracle 存储过程

    EF是如何调用的存储过程的,本人也是翻遍了个大网站,查阅了很多资料.终于解决了遇到的问题. 第一步:创建存储过程,在这里我就不多说了,不是文章说的重点. declare O_VOUCHER_ACT_D ...

  9. 不要在对抽象类接口abstract virtual什么的混淆不清了

    (最近带一个新手入门 讲这边老费力了.) 接口和抽象类不过都是类的抽象罢了,这是他们的本质,只不过人们的思维角度不同而已,一个偏向为行为契约上的抽象(接口) 一个更像大自然中的繁衍关系(抽象类). 直 ...

  10. 【学习笔记】--- 老男孩学Python,day9, 文件操作

    有 + 就是有光标,注意光标位置 不同模式打开文件的完全列表:  http://www.runoob.com/python/python-files-io.html 模式 描述 r 以只读方式打开文件 ...