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

这篇具有很好参考价值的文章主要介绍了Thinking -- CSS从根解决选择前一个兄弟元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

换句话:就是如何选中特定class的前一个兄弟元素。(如何选中下面每个b元素前的a元素)
Thinking -- CSS从根解决选择前一个兄弟元素

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;
}

Thinking -- CSS从根解决选择前一个兄弟元素
其目前浏览器支持程度不是特别理想(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>

以上就可以实现了!

总结

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

解决这个问题的方式并不难,但思路值得延伸。文章来源地址https://www.toymoban.com/news/detail-442116.html

到了这里,关于Thinking -- CSS从根解决选择前一个兄弟元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS进阶方法——复合选择器、元素显示、背景设置

    复合选择器是建立在基础选择器之上,对基础选择器进行 组合形成 的。 复合选择器可以更准确、更高效的选择目标元素(标签) 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的 常用的复合选择器包括: 后代选择器 、 子选择器 、 并集选择器 、 伪类选

    2024年02月02日
    浏览(47)
  • Python-selenium学习笔记-css选择元素

    方法名:find_element(By.CSS_SELECTOR, \\\"元素名\\\") find_elements找所有 示例: 执行结果:  代表寻找第一个类名为plant的元素, 等效于根据CLASS寻找元素 若要 根据tag名 寻找,不用加“.”, 直接写tag名称即可,如下: 结果:   根据id寻找用“#”+id名, 中间不能有空格 结果: 子元素是

    2024年03月23日
    浏览(45)
  • Selenium操作网页时,如何获取元素的CSS选择器?

    输入文本操作的元素的CSS选择器怎么获取,用https://passport.baidu.com/v2/?login演示 要获取元素的CSS选择器,可以使用浏览器的开发者工具来查看页面的HTML结构和元素属性。以下是在Chrome浏览器中获取元素CSS选择器的步骤: 打开Chrome浏览器,并访问目标网站(例如:https://passpor

    2024年01月16日
    浏览(58)
  • 【前端】CSS(引入方式+选择器+常用元素属性+盒模型+弹性布局)

    层叠样式表(Cascading Style Sheets) 对元素位置的排版进行精确控制,实现结构和样式的分离 CSS 控制页面的展示效果 HTML决定页面的结构 选择器+{一条/N条声明} 选择器:要修改谁 声明:具体要修改什么内容。声明的属性是键值对,用分号区分,键和值用: 通常情况下,把style放

    2024年04月15日
    浏览(53)
  • css 不选最后一个元素

    在css中,可以利用“:last-child”和“:not()”选择器来不选最后一个元素,换个说法: 可以选择除了最后一个元素的所有元素。 :last-child 选择器匹配属于其父元素的最后一个子元素的每个元素。 :not(selector) 选择器匹配非指定元素/选择器的每个元素。 示例: 正常情况下这样选

    2024年02月11日
    浏览(32)
  • 自动化测试学习(六)-selenium定位元素之CSS选择器详细用法

    目录 1.通过class属性定位 2.通过id属性定位 3.通过标签名定位 4.其他方法定位    CSS是一种语言,它可以比较灵活的选择控件的任意属性,一般情况下比Xpath快,下面我们详细介绍CSS的用法。CSS常见语法如下表所示:  选择器 示例 描述 .class .s_ipt 选择class=\\\"s_ipt\\\"的所有元素 #i

    2024年01月17日
    浏览(52)
  • CSS笔记(黑马程序员pink老师前端)选择器,字体,文本属性,Emmet语法,元素显示模式,CSS背景

    选择器分为基础选择器和复合选择器两大类。 基础选择器 包括:标签选择器、类选择器、id选择器和通配符选择器。 多类名 可以把一些标签元素共同的样式放到一个类里面。这些标签都可以调用这个公共的类,然后再调用自己独有的类。 复合选择器 基础选择器的组合.包括后

    2024年02月09日
    浏览(61)
  • 面试:CSS让一个元素水平垂直居中

    水平居中 对于 行内元素 : text-align: center ; 对于确定宽度的块级元素: (1)width和margin实现。 margin: 0 auto ; (2)绝对定位和margin-left: (父width - 子width)/2, 前提是父元素position: relative 对于宽度未知的块级元素 (1) table标签配合margin左右auto实现水平居中 。使用table标签(或直

    2024年02月06日
    浏览(42)
  • CSS 系列 -- 块级元素靠右的实现方式

    HTML 如下: 想要块级元素居右往往设置 margin-right: 0 属性是行不通的 下面介绍五种方法,不同场景适用不同方法 使用 margin 属性 将  margin-left  设为  auto  后, 元素左边的  margin  会被尽可能的撑大, 所以自然就把元素挤到右边去了 使用 position 属性 使用 position 定位, 绝对能

    2023年04月13日
    浏览(34)
  • css系列--块级元素靠右的实现方式

    问题描述: 实现某一行中内部元素,靠右展示 HTML 如下: 想要块级元素居右往往设置 margin-right: 0 属性是行不通的 此方案不可行!! 方法1:使用 margin 属性 方法2:使用 position 属性 方法3:使用 float 属性 方法4:使用 text-align 属性 将块设为行内元素,然后父元素使用 text-al

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包