当前位置:首页 > 新闻动态 > 网站文章

8则未必知道且超级实用的纯CSS布局排版技巧 | 网易四年实践

来源: 浏览:145 时间:2023-10-11

前言

最近有些读者悄悄发现了笔者的个人官网,无一例外都使用惊喜、惊叹等词形容。没错,笔者使用大量CSS阐述了什么叫做玩转CSS的艺术之美。即使某些应用场景缺少JS的加持,笔者也能将CSS玩得游刃有余,整个网站源码里CSS大概占据60%的分量,很多效果不是为了炫技而是想告诉大家CSS的重要性与实用性。因此笔者想通过本文分享一些大家未必知道且超级实用的纯CSS布局排版技巧实现一些常见或特殊的布局排版。

开发每一张网页都离不开布局排版,基于良好布局排版打下基础,才能使后续的开发更顺利。当然不能停留在IExplorer时代那种局限思维上,没办法解决的布局排版都用JS实现。今时不同往日,现代CSS属性能更好地快速实现各种布局排版,节约更多时间去摸鱼。

不过按照笔者目前了解的情况来看,大部分同学即使在无需兼容IExplorer的情况下还是遵循CSS+JS的方式完成一些常见或特殊的布局排版。从HTML/CSS/JS前端三剑客的定位来看,HTML映射网页的结构,CSS映射网页的表现,JS映射网页的行为

布局排版指将图形、文本、图像、媒体等可视化信息元素在页面布局上调整位置、尺寸等属性使页面布局变得条理化的过程。大部分同学认为布局排版就是几个合理的CSS属性随便拼凑在一起,但多数情况即使实现也会存在瑕疵,此时就可能使用JS介入。

从布局排版的特征可知它属于表现范畴,因此笔者认为大部分布局排版都能使用纯CSS完成,无需JS介入。

本文秉承能使用CSS实现的效果都优先使用CSS的原则,为大家讲解笔者如何巧妙运用各种纯CSS开发技巧完成一些常见或特殊的布局排版。因此笔者建议大家认真看一遍以下内容,绝对让你有所收货和惊喜。

若对CSS无特别想法,建议体验以下网站,相信你会认真踏实地阅读本文。

  • 个人官网:暂时支持PC端浏览,拒绝支持IExplorer
  • 特效专辑:暂时支持PC端浏览,拒绝支持IExplorer

属性

在进入主题前,笔者总结出布局排版一些必备属性,这些属性能快速搭建整体效果,再通过一些常用选择器加以修饰达到完美效果。看似简单,但使用起来不一定完全驾驭。

必备属性都是一些几何属性,主要用于声明位置和尺寸。

  • 浮动布局:float
  • 定位布局:position/left/right/top/bottom/z-index
  • 弹性布局:display:flex/inline-flex、flex系列属性
  • 盒子模型:box-sizing/margin/padding/border/width/height

选择器因CSS模块众多而派生出的数量也众多,若无特别方式记熟这些选择器对应的功能,也很难将其发挥到最大作用。

笔者根据选择器的功能划分出八大类,每个类别的选择器都能在一个应用场景里互相组合,记熟这些类别的选择器,相信就能将选择器发挥到最大作用,也能游刃有余将其应用到一些常见或特殊的布局排版里。

布局排版可能只应用到某些选择器,但也不妨碍大家通过以下归类方式记忆。选择器作为CSS的重要组成部分,比起属性组合会有更多的玩法。

基础选择器

选择器

别名

说明

版本

常用

tag

标签选择器

指定类型的标签

1

#id

ID选择器

指定身份的标签

1

.class

类选择器

指定类名的标签

1

*

通配选择器

所有类型的标签

2

/div>

blockquote>

层次选择器

/blockquote>

div>

/table>

p data-track="73">集合选择器

/p>

table>

/colgroup>

tbody>

/tbody>

colgroup>

col/>

col/>

col/>

col/>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

tr>

/tr>

td>

选择器

/td>

td>

说明

/td>

td>

版本

/td>

td>

常用

/td>

td>

:active

/td>

td>

鼠标激活的元素

/td>

td>

1

/td>

td>

×

/td>

td>

:hover

/td>

td>

鼠标悬浮的元素

/td>

td>

1

/td>

td>

/td>

td>

:link

/td>

td>

未访问的链接元素

/td>

td>

1

/td>

td>

×

/td>

td>

:visited

/td>

td>

已访问的链接元素

/td>

td>

1

/td>

td>

×

/td>

td>

:target

/td>

td>

当前锚点的元素

/td>

td>

3

/td>

td>

×

/td>

td>

:focus

/td>

td>

输入聚焦的表单元素

/td>

td>

2

/td>

td>

/td>

td>

:required

/td>

td>

输入必填的表单元素

/td>

td>

3

/td>

td>

/td>

td>

:valid

/td>

td>

输入合法的表单元素

/td>

td>

3

/td>

td>

/td>

td>

:invalid

/td>

td>

输入非法的表单元素

/td>

td>

3

/td>

td>

/td>

td>

:in-range

/td>

td>

输入范围以内的表单元素

/td>

td>

3

/td>

td>

×

/td>

td>

:out-of-range

/td>

td>

输入范围以外的表单元素

/td>

td>

3

/td>

td>

×

/td>

td>

:checked

/td>

td>

选项选中的表单元素

/td>

td>

3

/td>

td>

/td>

td>

:optional

/td>

td>

选项可选的表单元素

/td>

td>

3

/td>

td>

×

/td>

td>

:enabled

/td>

td>

事件启用的表单元素

/td>

td>

3

/td>

td>

×

/td>

td>

:disabled

/td>

td>

事件禁用的表单元素

/td>

td>

3

/td>

td>

/td>

td>

:read-only

/td>

td>

只读的表单元素

/td>

td>

3

/td>

td>

×

/td>

td>

:read-write

/td>

td>

可读可写的表单元素

/td>

td>

3

/td>

td>

×

/td>

td>

:target-within

/td>

td>

内部锚点元素处于激活状态的元素

/td>

td>

4

/td>

td>

×

/td>

td>

:focus-within

/td>

td>

内部表单元素处于聚焦状态的元素

/td>

td>

4

/td>

td>

/td>

td>

:focus-visible

/td>

td>

输入聚焦的表单元素

/td>

td>

4

/td>

td>

×

/td>

td>

:blank

/td>

td>

输入为空的表单元素

/td>

td>

4

/td>

td>

×

/td>

td>

:user-invalid

/td>

td>

输入合法的表单元素

/td>

td>

4

/td>

td>

×

/td>

td>

:indeterminate

/td>

td>

选项未定的表单元素

/td>

td>

4

/td>

td>

×

/td>

td>

:placeholder-shown

/td>

td>

占位显示的表单元素

/td>

td>

4

/td>

td>

/td>

td>

:current()

/td>

td>

浏览中的元素

/td>

td>

4

/td>

td>

×

/td>

td>

:past()

/td>

td>

已浏览的元素

/td>

td>

4

/td>

td>

×

/td>

td>

:future()

/td>

td>

未浏览的元素

/td>

td>

4

/td>

td>

×

/td>

td>

:playing

/td>

td>

开始播放的媒体元素

/td>

td>

4

/td>

td>

×

/td>

td>

:paused

/td>

td>

暂停播放的媒体元素

/td>

td>

4

/td>

td>

×

/td>

p data-track="252">选择器

/p>

p data-track="253">说明

/p>

p data-track="254">版本

/p>

p data-track="255">常用

/p>

p data-track="256">:root

/p>

p data-track="257">文档的根元素

/p>

p data-track="258">3

/p>

p data-track="259">×

/p>

p data-track="260">:empty

/p>

p data-track="261">无子元素的元素

/p>

p data-track="262">3

/p>

p data-track="263">√

/p>

p data-track="264">:nth-child(n)

/p>

p data-track="265">元素中指定顺序索引的元素

/p>

p data-track="266">3

/p>

p data-track="267">√

/p>

p data-track="268">:nth-last-child(n)

/p>

p data-track="269">元素中指定逆序索引的元素

/p>

p data-track="270">3

/p>

p data-track="271">×

/p>

p data-track="272">:first-child

/p>

p data-track="273">元素中为首的元素

/p>

p data-track="274">2

/p>

p data-track="275">√

/p>

p data-track="276">:last-child

/p>

p data-track="277">元素中为尾的元素

/p>

p data-track="278">3

/p>

p data-track="279">√

/p>

p data-track="280">:only-child

/p>

p data-track="281">父元素仅有该元素的元素

/p>

p data-track="282">3

/p>

p data-track="283">√

/p>

p data-track="284">:nth-of-type(n)

/p>

p data-track="285">标签中指定顺序索引的标签

/p>

p data-track="286">3

/p>

p data-track="287">√

/p>

p data-track="288">:nth-last-of-type(n)

/p>

p data-track="289">标签中指定逆序索引的标签

/p>

p data-track="290">3

/p>

p data-track="291">×

/p>

p data-track="292">:first-of-type

/p>

p data-track="293">标签中为首的标签

/p>

p data-track="294">3

/p>

p data-track="295">√

/p>

p data-track="296">:last-of-type

/p>

p data-track="297">标签中为尾标签

/p>

p data-track="298">3

/p>

p data-track="299">√

/p>

p data-track="300">:only-of-type

/p>

p data-track="301">父元素仅有该标签的标签

/p>

p data-track="302">3

/p>

p data-track="303">√

/p>

选择器

别名

说明

版本

常用

elemP elemC

后代选择器

元素的后代元素

1

elemP>elemC

子代选择器

元素的子代元素

2

elem1+elem2

相邻同胞选择器

元素相邻的同胞元素

2

elem1~elem2

通用同胞选择器

元素后面的同胞元素

3

选择器

别名

说明

版本

常用

elem1,elem2

并集选择器

多个指定的元素

1

elem.class

交集选择器

指定类名的元素

1

选择器

说明

版本

常用

:lang

指定标记语言的元素

2

×

:dir()

指定编写方向的元素

4

×

:has

包含指定元素的元素

4

×

:is

指定条件的元素

4

×

:not

非指定条件的元素

4

:where

指定条件的元素

4

×

:scope

指定元素作为参考点

4

×

:any-link

所有包含href的链接元素

4

×

:local-link

所有包含href且属于绝对地址的链接元素

4

×

属性选择器

选择器

说明

版本

常用

[attr]

指定属性的元素

2

[attr=val]

属性等于指定值的元素

2

[attr*=val]

属性包含指定值的元素

3

[attr^=val]

属性以指定值开头的元素

3

[attr$=val]

属性以指定值结尾的元素

3

[attr~=val]

属性包含指定值(完整单词)的元素(不推荐使用)

2

×

[attr|=val]

属性以指定值(完整单词)开头的元素(不推荐使用)

2

×

伪元素

选择器

说明

版本

常用

::before

在元素前插入的内容

2

::after

在元素后插入的内容

2

::first-letter

元素的首字母

1

×

::first-line

元素的首行

1

×

::selection

鼠标选中的元素

3

×

::backdrop

全屏模式的元素

4

×

::placeholder

表单元素的占位

4

技巧

有了上述前置知识,接下来跟着笔者体验一次如何巧妙运用各种纯CSS开发技巧完成一些常见或特殊的布局排版吧。为了方便浏览器自动计算某些样式,需全局设置box-sizing:border-box,编码前请引入笔者整理的reset.css。

主体布局

主体布局指在大部分情况下通用且具备统一特征的占位布局。掌握主体布局是一个前端必不可少的技能,养成看设计图就能大概规划出整体布局的前提是必须熟悉这些主体布局的特点与构造。

全屏布局

经典的全屏布局由顶部、底部和主体三部分组成,其特点为三部分左右满屏拉伸、顶部底部高度固定和主体高度自适应。该布局很常见,也是大部分Web应用主体的主流布局。通常使用

三个标签语义化排版,
内还可插入

地址 · ADDRESS

地址:建邺区新城科技园嘉陵江东街18号2层

邮箱:309474043@qq.Com

点击查看更多案例

联系 · CALL TEL

400-8793-956

售后专线:025-65016872

业务QQ:309474043    售后QQ:1850555641

©南京安优网络科技有限公司 版权所有   苏ICP备12071769号-4  网站地图