当前位置: 首页 > 科技观察

一篇文章将带你了解一个全新的CSS选择器:Has()

时间:2023-03-14 18:09:05 科技观察

大家好,我是CUGGZ。您是否考虑过使用CSS选择器来检查父元素中是否存在特定元素?例如,如果卡片组件中有图像,则为其添加display:flex。这在以前的CSS中是不可能的,而新的CSS选择器:has可以帮助我们选择包含特定元素的父元素。让我们来看看这个全新的CSS选择器吧!:has选择器概述在CSS中,我们不能根据元素中是否有特定元素来设置父元素的样式。为此,我们必须创建一个CSS类并根据需要切换该类。考虑以下示例:有两种类型的卡片:带图片和不带图片。这需要在CSS中完成:/*cardwithimage*/.card{display:flex;对齐项目:居中;gap:1rem;}/*没有图像的卡片*/.card-plain{display:block;border-top:3pxsolid#7c93e9;

卡片内容
cardcontent
这里创建一个类card-plain,专门用于没有图片的卡片,没有图片的时候不需要flex布局.如果使用CSS中的父选择器:has,则不需要写这个类,只用它来检查卡片是否包含.card-image:.card:has(.card-image){display:flex;align-items:center;}根据CSS规范,:has选择器可以检查父元素是否包含至少一个元素,或者一个条件,比如input是否有焦点。:has选择器不仅检查父元素是否包含特定的子元素,还检查元素后是否跟有另一个元素:.cardh2:has(+p){}这将检查

元素是否是直接跟在

元素之后。我们还可以将它与表单元素一起使用来检查输入是否获得焦点:效果!1.标题样式处理章节标题有两种情况,一种是只包含标题,另一种是包含标题和链接。根据是否有链接定义不同的样式:

最新文章

查看全部
.section-header{display:flex;justify-content:space-between;}.section-header:has(>a){align-items:center;border-bottom:1pxsolid;padding-bottom:0.5rem;}:has(>a)这里用的是只选择直接子元素2.卡片布局中的卡片操作有两种:一种只有一个操作(链接),而other有多个操作(保存、分享等)。当一张图片有多个操作时,需要在这些操作上加上display:flex,可以这样实现:喜欢保存更多.card-actions:has(.start,.end){display:flex;justify-content:space-between;}3.卡片的圆角根据是否重置卡片组件的border-radius.card:not(:has(img)).card-content{border-top-left-radius:12px;border-top-right-radius:12px;}.cardimg{border-top-left-radius:12px;border-top-right-radius:12px;}.card-content{border-bottom-left-radius:12px;border-bottom-right-radius:12px;}效果如下:4.filter组件有一个组件有多个options,当他们没有被选中时,没有reset按钮显示是的。选择其中一个选项后,将显示一个重置按钮。这可以使用:has选择器轻松实现:.btn-reset{display:none;}.multiselect:has(input:checked).btn-reset{display:block;}5.有时可能会显示或隐藏表单元素required根据先前的选择显示特定的表单字段。下面的例子中,当下拉框中选择了“other”字段时,会显示otherreason输入框:使用CSS:has选择器检查选择菜单中other字段是否被选中,并显示otherreasoninputbox在此基础上:.other-field{display:block;}form:has(option[value="other"]:checked).other-field{display:block;}6.导航栏有一个navigationbarwithasubmenu,Showsubmenuwhenmousehoversovermenuitem:我们需要做的就是根据是否显示子菜单显示或隐藏右侧的箭头。这可以使用:has选择器轻松实现,这里只需检查ul是否包含在li元素中:li:has(ul)>a:after{content:"";}7.在某些仪表板上强制警报,它用户可能需要注意重要警报。在这种情况下,页面内提醒可能还不够。例如,在这种情况下,可能会向标题元素添加红色边框和深红色背景色。这增加了用户快速注意到警报的可能性。CSS:has检查.main元素是否有警报。如果是这样,请将以下样式添加到标题中:.main:has(.alert).header{border-top:2pxsolidred;background-color:#fff4f4;}8.切换配色方案可以使用CSS来改变:has网站的配色方案。例如,如果您有多个使用CSS变量构建的主题,您可以通过