Thinking -- CSS从根解决选择前一个兄弟元素

article/2025/9/26 16:53:27

Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想。

开发中遇到这样一个诉求:特定class的元素单独占一行,现需要针对其前一个兄弟元素增加相应标识,以使其占据所在行的剩余所有空间。

换句话:就是如何选中特定class的前一个兄弟元素。(如何选中下面每个b元素前的a元素)
在这里插入图片描述

CSS 不存在选择前一个兄弟元素的选择器!CSS 不存在选择前一个兄弟元素的选择器!

为什么?

流布局

块元素: 按照基于其父元素的书写顺序(默认值: horizontal-tb) 的*块流动方向 (block flow direction)*放置 — 每个块级元素会在上一个元素下面另起一行。=> 从上到下

内联元素: 如果父级块级元素的宽度有足够的空间,它们与其他内联元素、相邻的文本内容(或者被包裹的)被安排在同一行。如果空间不够,溢出的文本或元素将移到新的一行。==> 从左到右

思考

了解了浏览器正常情况下的流布局形式(从左到右,从上到下),我们就可以得知:CSS 之所以不支持,是由于其流布局导致。

如果可以通过当前元素选择前一个兄弟元素,可能会导致额外的重绘操作!

CSS NEXT

:has( <forgiving-relative-selector-list> )

:has() 表示一个元素,如果作为参数传递的任何相对选择器在锚定到该元素时,至少匹配一个元素。这个伪类通过把可容错相对选择器列表作为参数,提供了一种针对引用元素选择父元素或者先前的兄弟元素的方法。

相关规范:https://www.w3.org/TR/selectors-4/#relational
MDN地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/:has

实现上述诉求:

.a:has(+ .b) {background-color: blue;
}

在这里插入图片描述
其目前浏览器支持程度不是特别理想(Firefox也不支持)

解决方案

无法选择前一个兄弟元素,是有流布局导致,我们是否可以改变布局方式,来解决呢?

通过 flex 的属性flex-direction: row-reverse; 来反转,这样问题就变为了:如何选择特定class的后一个兄弟元素?

div {display: flex;flex-direction: row-reverse;justify-content: flex-end;
}li {display: inline-block;width: 30px;height: 30px;margin-right: 10px;background-color: gainsboro;
}.b+.a {background-color: blue;
}

需要注意的是,此时 DOM 顺序需要反转。

<div><li class="b">b</li><li class="a">a</li><li class="b">b</li><li class="a">a</li><li class="a">a</li><li class="b">b</li><li class="a">a</li><li class="a">a</li><li class="a">a</li><li class="a">a</li>
</div>

以上就可以实现了!

总结

“既然没有选择前一个兄弟元素的选择器”,那就布局反向(从右向左),这样问题就变为了”如何选择后一个兄弟元素“。

解决这个问题的方式并不难,但思路值得延伸。


http://chatgpt.dhexx.cn/article/NvRNheF0.shtml

相关文章

JS 兄弟元素和兄弟节点

获取兄弟节点和兄弟元素 例子&#xff1a; //body内容<ul id"ul">wwwwww<!-- 我是注释 --><li>我是li标签1</li><li id"li2">我是li标签2</li><li>我是li标签3</li><li>我是li标签4</li><…

css-知识点(学习笔记)

一、鼠标悬停样式 hover伪类基础用法 在前端学习的初期&#xff0c;想必大家用的很多的属性之一就有hover吧,hover伪类元素使用的三种情况 1、 hover用于父子元素 父子元素直接在父元素的id或者class或者标签名后紧接着:hover 然后空格子元素的名字就可以了。 2、 hover用于…

RPC原理及其调用过程

RPC原理及其调用过程 远程过程调用&#xff0c;简称为RPC&#xff0c;是一个计算机通信协议&#xff0c;它允许运行于一台计算机的程序调用另一台计算机的子程序&#xff0c;而无需额外地为这个交互作用编程。 RPC与传统的HTTP对比 优点&#xff1a; 1. 传输效率高(二进制传输…

用简单的方式去描述RPC原理

接下来我们就讲RPC&#xff1a;远程过程调用。其实RPC仅仅是一个概念&#xff0c;RPC没有协议没有框架&#xff0c;平时我们说的RPC框架其实是简称&#xff0c;很多人被带偏了&#xff0c;以为RPC是一个协议或者是框架&#xff0c;所以你以后如果听到RPC框架&#xff0c;你要立…

RPC核心原理是什么?以及常用技术有哪些?

前面一篇文章有提到过RPC&#xff0c;那么RPC是什么呢&#xff1f; RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;代表远程过程调用&#xff0c;通过网络通信调用不同的服务&#xff0c;共同支撑一个软件系统&#xff0c;微服务实现的基石技术。使用RPC可以解…

RPC框架原理简介

什么是RPC框架&#xff1f; RPC&#xff0c;全称为Remote Procedure Call&#xff0c;即远程过程调用&#xff0c;是一种计算机通信协议。 比如现在有两台机器&#xff1a;A机器和B机器&#xff0c;并且分别部署了应用A和应用B。假设此时位于A机器上的A应用想要调用位于B机器上…

RPC通信原理

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、RPC是什么&#xff1f;二、RPC原理总…

RPC框架面试总结-RPC原理及实现

一、什么是RPC RPC是远程调用过程的简写&#xff0c;是一个协议&#xff0c;处于网络通信协议的第五层&#xff1a;会话层&#xff0c;其下就是TCP/IP协议&#xff0c;在建立在其基础上的通信会话协议。RPC定义了交互的模式&#xff0c;而应用程序使用这些模式&#xff0c;来访…

RPC原理与FastRPC实现

0. 起因 最近看文档&#xff0c;发现一些组件是通过FastRPC来进行沟通的&#xff0c;并且偶尔看到某些场景下在FastRPC上的时间消耗好像也蛮可观&#xff0c;恰好FastRPC是开源的&#xff0c;因此决定看看FastRPC具体的实现。 1. RPC简介 当初在学Java的时候&#xff0c;初遇…

RPC原理详解

转自&#xff1a;http://www.cnblogs.com/metoy/p/4321311.html RPC 功能目标 RPC 的主要功能目标是让构建分布式计算&#xff08;应用&#xff09;更容易&#xff0c;在提供强大的远程调用能力时不损失本地调用的语义简洁性。 为实现该目标&#xff0c;RPC 框架需提供一种透…

RPC原理介绍

面向服务架构SOA 任何大型网站的发展都伴随着网站架构的演进。网站架构一般最初是单应用设计&#xff0c;然后逐渐经历面向对象设计和模块化设计的架构&#xff0c;最终发展到面向服务的服务化架构。在单应用设计架构体系当中&#xff0c;我们关注的是方法和实体&#xff1b;而…

RPC 原理与实现

文章目录 1. RPC 简介1.1 什么是RPCReference: LPC & IPC (本地过程调用) 1.2 为什么要用RPC1.2.1 系统架构的演进1.2.2 Web 服务的技术结构1.2.2 SOAP &#xff08; Simple Object Access Protocol&#xff09;1.2.2 REST&#xff08;Representational State Transfort&am…

RPC核心原理

了解RPC RPC全称Remote Procedure Call,即远程过程调用.其中远程需要跨机器,跨机器需要可靠的网络编程技术实现,无论是Java原生的网络编程模型还是Netty都会让代码中出现大量与业务无关的网络编程代码,RPC技术则是为了解决这个问题的.它帮助我们屏蔽网络编程的细节,实现调用远…

RPC原理(1)之深入RPC原理简介

一、RPC调用原理图 下面这张图是我们微服务一次Http调用请求图&#xff1a; 首先在请求的过程中我们知道是有三次握手&#xff0c;四次挥手的流程&#xff0c;具体流程如下&#xff1a; 1.浏览器请求服务器(订单服务)&#xff0c;请求建立连接&#xff0c;首先客户端向服务器…

RPC原理简述

RPC&#xff08;Remote Procedure Call&#xff09;&#xff1a;远程过程调用&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的思想。 RPC 是一种技术思想而非一种规范或协议&#xff0c;常见 RPC 技术和框架有&#xff1a; 应…

RPC核心原理详解

什么是RPC&#xff1f; RPC的全称是Remote Procedure Call&#xff0c;即远程过程调用。简单解读字面上的意思&#xff0c;远程肯定是指要跨机器而非本机&#xff0c;所以需要用到网络编程才能实现&#xff0c;但是不是只要通过网络通信访问到另一台机器的应用程序&#xff0c…

RPC原理

RPC就是远程过程调用&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的思想。 原理 一个完整的RPC主要包括三部分: 服务注册中心&#xff08;Registry&#xff09;&#xff0c;负责将本地服务发布成远程服务&#xff0c;管理远…

从零开始实现RPC框架 - RPC原理及实现

RPC概述 RPC(Remote Procedure Call)即远程过程调用&#xff0c;允许一台计算机调用另一台计算机上的程序得到结果&#xff0c;而代码中不需要做额外的编程&#xff0c;就像在本地调用一样。 现在互联网应用的量级越来越大&#xff0c;单台计算机的能力有限&#xff0c;需要借…

RPC介绍与原理

RPC介绍与原理 RPC介绍 RPC是什么 RPC&#xff08;Remote Procedure Call&#xff09;是一种进程间通信方式。简单地说就是能使应用像调用本地方法一样的调用远程的过程或服务&#xff0c;可以应用在分布式服务、分布式计算、远程服务调用等许多场景。说起 RPC 大家并不陌生…

RPC理论原理

目录 集群和分布式RPC通信原理 集群和分布式 集群&#xff1a;每一台服务器独立运行一个工程的所有模块。 分布式&#xff1a;一个工程拆分了很多模块&#xff0c;每一个模块独立部署运行在一个服务器主机上&#xff0c;所有服务器协同工作共同提供服务&#xff0c;每一台服务…