首页 > 其他分享 >CSS实现根据子元素数量应用不同样式

CSS实现根据子元素数量应用不同样式

时间:2023-06-27 11:55:17浏览次数:42  
标签:minim 样式 sint 元素 veniam eu voluptate exercitation CSS

在前端的页面布局中经常会出现在子元素个数使用不同的样式的需求,比如文章列表,在较少内容下单列表现,而在元素内容较多时使用双列表现。再比如在页面排版上,可以根据元素内容的多少来修改内容的缩放,位置,颜色等样式

:has() 选择器简介

: has()选择器中的括号传递一个选择器参数,如果选择器匹配上了元素就会应用后面的样式,例如:

<div>
	div
</div>

<div>
	<h1>h1</h1>
	div
</div>
div{
	border:1px solid #000;
	margin:1em;
}

div:has(h1){
	background-color:red;
}

显示结果

:has() + : nth-child ()

现在我们知道了 :has() 选择器是用来在匹配成功时使用样式的,而加上 :nth-child() 就会有根据子元素数量去匹配样式的效果
例如:

<div class="container">
	<p>p1</p>
</div>

<div class="container">
	<p>p1</p>
	<p>p2</p>
</div>

<div class="container">
	<p>p1</p>
	<p>p2</p>
	<p>p3</p>
</div>
.container{
	border:1px solid #000;
	margin:1em;
}

/* default */
.container {
	background-color:#ddd;
}
/* 包含2个p时 */
.container:has(> p:nth-child(2)){
	background-color:#aaa;
}
/* 包含3个p时 */
.container:has(> p:nth-child(3)){
	background-color:red;
}

显示效果:
image.png

其他使用示例

超过一定数量,某子元素应用样式

  <div class="container">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
  </div>
  
   <div class="container">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
  </div>

  <style>
    .container{
      display: flex;
      align-items: center;;
      gap: 1em;
      padding: 1em;
      height: 200px;
    }

    .container > div {
      height: 80%;
      background-color: #ddd;
      display: flex;
      align-items: center;
      justify-content: center;
      flex:auto;
    }

    .container:has( > div:nth-child(5)) > div:nth-child(3){
      background-color:aqua;
      flex:1.2;
      height: 100%;
    }
  </style>

效果:
只有在 5 个及以上子元素的情况下有,某子元素有特定样式(比如轮播图场景)

image.png

根据子元素数量文本分栏

<div class="container">
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
</div>

<div class="container">
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
</div>

<style>
.container {
	border: 1px solid #000;
	margin: 1em;
	columns: 1;
}

/* 包含3个p时 */
.container:has(> p:nth-child(3)) {
	columns: 2;
}
</style>

显示效果:
image.png

结尾

使用 :has() + :nth-child() 可以在前端页面中更好的去做页面布局的自适应,也在内容不足的情况下提供了一种简单实用的容错方法。

image.png
而在兼容性上除 Firefox 浏览器,其他的浏览器均有较好的支持。

个人博客: www.iamsee.top

标签:minim,样式,sint,元素,veniam,eu,voluptate,exercitation,CSS
From: https://www.cnblogs.com/wanna2leo/p/17508291.html

相关文章

  • Java求和元素_实现一个List集合中的某个元素的求和
    Listuserlist=userService.findAll();Integersum=userlist.stream().collect(Collectors.summingInt(User::getAge));packagecom.example.list_test;importjava.util.ArrayList;importjava.util.List;/***描述:ListTest3**@author何志鹏*@ClassName......
  • css颜色变淡和变浅方法收集(模拟sass的darken和lighten函数)
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • selenium中使用CSS 定位
    CSS是一种语言,用来描述HTML和XML文档的表现。CSS使用选择器为页面元素绑定属性。CSS选择器可以较为灵活地选择控件的任意属性,一般情况下,CSS定位速度比XPath定位速度快 通过CSSSelector选择单个元素的方法是find_element(By.CSS_SELECTOR,CSSSelector参数)......
  • 操控元素常用方法
    WebElement 中的常用方法(1)clear():清除文本(2)send_keys(value):模拟按键输入(3)size:返回元素的尺寸(4)text:获取元素的文本(5)is_displayed():设置该元素是否用户可见(6)click():单击元素(7)submit():提交表单(8)get_attribute('class'):获取元素属性(9)quit():关闭浏览器element=wd.find_e......
  • selenium根据link、partial link选择元素
    link定位By.LINK_TEXT方法是通过元素标签对之间的文字信息来定位元素的,它专门用来定位文本链接.百度输入框上面的几个文字链接的代码如下。<aclass="mnav"name="tj_trnews"href="http://news.baidu.com">新闻</a><aclass="mnav"name="tj_trhao123"href=&......
  • selenium根据class属性、tag名选择元素
    根据class属性选择元素元素也有类型,class属性就用来标志着元素类型若网页html内容如下:<body><divclass="plant"><span>土豆</span></div><divclass="plant"><span>洋葱</span></div>......
  • JS 随机从数组中取出几个元素
    从数组items中随机取出一个元素varitem=items[Math.floor(Math.random()*items.length)]; 例子:<!DOCTYPEhtml><htmllang="zh-cn"><head><metacharset="UTF-8"><title></title></head><body><script&g......
  • LabVIEW Excel工具包快速读写EXCEL样式模板生成测试报告制作
    LabVIEWExcel工具包快速读写EXCEL样式模板生成测试报告制作原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/673187774245.html......
  • 【CSS】写一个原生的透明 input 标签输入框
    <divclass="search"> <imgsrc="@/assets/tools/search.svg"/> <inputplaceholder="搜索"@input="onSearch"v-model="searchValue"/></div>.search{ height:32px; width:204px; di......
  • input样式重置
    input样式重置(outline:none) input样式重置(outline:none)我们在写表单的时候,经常需要自定义表单的样式,当然input输入框也不例外,那么如何能写出好看一点的输入框呢?例如简单的三个空按钮:<inputtype="button"id="btn1"><inputtype="button"i......