如何优雅地为列表非首项元素添加样式,关键靠他们。

简介: 在开发中我们常常会会遇到列表相关的场景,比如说:卡片列表,导航栏等等。

前言

在开发中我们常常会会遇到列表相关的场景,比如说:卡片列表,导航栏等等。而在实现上,有一个问题需要我们去注意:如何给列表非首项元素添加样式,简单地来说就是一个列表中除第一个元素外其他元素赋予样式,比如:我想给一个导航栏的第一个导航项在左边,其他在右边,效果如下图片所示.

1.webp.jpg

这个时候可能有人会说这实习起来不是很简单吗,根据优先级,使用id选择器给第一个元素赋予右浮动,其他元素使用class选择器赋予左浮动不就行了吗?

1.webp (1).jpg

nonono,使用id选择器赋予样式本身就是一种错误的选择,严重扰乱优先级,可维护性极差。

这里我通过码上掘金给出导航栏的初始样式,导航项都在左侧,掘友可以通过下面地讲解来分别利用码上掘金来实验效果,下面开始我们的正题:使用伪类选择符来优雅地为非首项元素添加样式。

image.png

伪类实现方案

可以结合两种伪类来处理这个问题,拆解一下非首项,首个,那么肯定会联想到:not():first这两个伪类

li:not(:first-child) {
  float: right;
}
复制代码

如上,我们选中了li元素,通过选定非首个元素的形式来选中非首项,除此之外我们还可以分开处理

li {
    float: right;
}
li:first-child {
    float: left;
}
复制代码

为所有的li元素赋予左浮动,再通过后来居上的原则,为首个元素设置右浮动

选择符实现方案

选择符实现方法包含了两种,利用随后兄弟选择符相邻兄弟选择符实现。

随后兄弟选择符实现

随后兄弟选择符可以匹配某项后的所有兄弟元素,所以可以利用这个特性为首项后的样式赋予样式,给首个节点赋予一个class,通过class与兄弟属性结合使用,便成功实现。

.active ~ li {
  float: right;
}
复制代码

下面再来看看另一个纯选择符实现——相邻兄弟选择符。

相邻兄弟选择符实现

相邻兄弟选择符选中的是目标元素向后相邻的兄弟元素,所以只能选择一个元素,那么这里就会有人问:“只能选中相邻的一个元素的话,如何做到为非首项后面的所有元素添加样式呢?”

li + li {
  float: right;
}
复制代码

就如上面利用相邻兄弟选择器实现解释上面的疑问,其选中的是li元素的兄弟元素的第一个li元素,而除了首项外,其他所有的li元素都有前兄弟元素,所以就成功地实现了选中非首项元素。

引发的思考

掘友通过尝试上面这几种方法后肯定会发现一个问题,那就是元素顺序问题

正常情况下遵循文档流,由左至右,而上面方法会引起最后呈现的元素顺序与文档流不一致,这也是由浮动的特性造成的,流的特性很神奇,所有我们可以利用流的特性与CSS结合出意想不到的效果,视觉上元素的顺序往往与文档流中的元素顺序不同,符合我们的开发规范和UI设计就好了。


相关文章
|
JSON 前端开发 Java
Json格式数据解析
Json格式数据解析
515 1
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
881 0
|
存储 数据采集 前端开发
用Requests+Cookie,轻松获取淘宝商品数据!
大家好,我是志斌! 最近身边一直有朋友说用Selenium无法爬取淘宝的商品数据了,问问有没有其他的爬取方式,来获取淘宝的商品数据。方法当然有了,下面我就给大家介绍一个Requests+Cookie来获取淘宝数据的方法。
1336 0
用Requests+Cookie,轻松获取淘宝商品数据!
|
数据库 Android开发
南大通用GBaseDataStudio 切换中文界面到英文界面
南大通用GBaseDataStudio 切换中文界面到英文界面
|
安全 开发者 UED
APP上架到应用商店需要哪些流程?
APP上架是一个涉及多个步骤和准备工作的过程,主要包括准备上架资料和遵循上架流程两个方面。
1397 1
|
安全 编译器 C语言
C语言常量的定义与使用的注意点
在 C 语言中,常量是在程序运行期间值不变的量,通过字面值、`#define` 或 `const` 关键字定义。字面常量直接在代码中表示固定值,如整数 `100`、浮点数 `3.14`、字符 `'A'` 和字符串 `"Hello, World!"`;`#define` 用于定义宏,如 `#define PI 3.14159`;`const` 则定义不可变变量,如 `const int daysInWeek = 7`。常量可用于数组大小、循环边界等场景,并能提升代码的可读性和可维护性。使用时需注意作用域、类型安全和命名,避免直接使用数字(魔法数字)。
|
网络虚拟化 安全 网络架构
|
域名解析 网络协议 数据安全/隐私保护
TCP/IP配置
【10月更文挑战第20天】TCP/IP配置
646 1
|
网络架构
|
存储 JavaScript 前端开发
HTML中onblur事件的使用
HTML中onblur事件的使用