父组件修改子组件css_如何在纯CSS中构建过滤组件

父组件修改子组件css

在今天的教程中,我们将学习如何构建仅CSS的过滤组件,考虑到需要JavaScript,您可以原谅这件事。 我们将使用一些简单的标记,一些表单控件以及一些您可能从未使用过的非常有趣CSS选择器。

我们正在努力

Tuts +的每位讲师都有自己的存档页面 。 我们将使用自己的标记来重新创建这样的教程列表。 然后,我们将实现一个组件,该组件将根据帖子所属的类别过滤帖子。

这是我们的最终项目:

让我们开始吧!

1.从HTML标记开始

我们首先确定组件中的过滤器类别。 在此示例中,我们将使用七个过滤器:

  1. All
  2. CSS
  3. JavaScript
  4. jQuery
  5. WordPress
  6. Slider
  7. fullPage.js

为此,我们首先定义七个单选按钮,将它们分组在categories关键字下。 默认情况下,第一个单选按钮处于选中状态:

<input type="radio" id="All" name="categories" value="All" checked>
<input type="radio" id="CSS" name="categories" value="CSS">
<input type="radio" id="JavaScript" name="categories" value="JavaScript">
<input type="radio" id="jQuery" name="categories" value="jQuery">
<input type="radio" id="WordPress" name="categories" value="WordPress">
<input type="radio" id="Slider" name="categories" value="Slider">
<input type="radio" id="fullPage.js" name="categories" value="fullPage.js">

然后,我们创建一个包含与上述单选按钮相关的标签的有序列表。

请记住,我们一个单选按钮与标签相关联通过设置它的id值等于标签的for价值:

<ol class="filters">
  <li>
    <label for="All">All</label>
  </li>
  <li>
    <label for="CSS">CSS</label>
  </li>
  <li>
    <label for="JavaScript">JavaScript</label>
  </li>
  <li>
    <label for="jQuery">jQuery</label>
  </li>
  <li>
    <label for="WordPress">WordPress</label>
  </li>
  <li>
    <label for="Slider">Slider</label>
  </li>
  <li>
    <label for="fullPage.js">fullPage.js</label>
  </li>
</ol>

接下来,我们设置另一个有序列表,其中包括我们要过滤的元素(我们的卡片)。 每个过滤的元素将具有一个自定义的data-category属性,其值是由空格分隔的过滤器列表:

<ol class="posts">
 <li class="post" data-category="CSS JavaScript">...</li>
 <li class="post" data-category="CSS JavaScript">...</li>
 
 <!-- 10 more list items here -->
</ol>

在我们的例子中,过滤后的元素将是帖子。 因此,我们将用来描述帖子及其元数据(标题,图像,类别)的标记如下所示:

<article>
  <figure>
    <a href="" target="_blank">
      <img src="IMG_SRC" alt="">
    </a>
    <figcaption>
      <ol class="post-categories">
        <li>
          <a href="">...</a>
        <li>
        
        <!-- possibly more list items here -->
      </ol>
      <h2 class="post-title">
        <a href="" target="_blank">...</a>
      </h2>
    </figcaption>
  </figure>
</article>

准备好标记后,让我们将注意力转移到所需的样式上。

2.定义样式

我们首先在视觉上隐藏单选按钮:

input[type="radio"] {
  position: absolute;
  left: -9999px;
}

然后,我们向过滤器添加一些样式:

:root {
  --black: #1a1a1a;
  --white: #fff;
  --green: #49b293;
}

.filters {
  text-align: center;
  margin-bottom: 2rem;
}

.filters * {
  display: inline-block;
}

.filters label {
  padding: 0.5rem 1rem;
  margin-bottom: 0.25rem;
  border-radius: 2rem;
  min-width: 50px;
  line-height: normal;
  cursor: pointer;
  transition: all 0.1s;
}

.filters label:hover {
  background: var(--green);
  color: var(--white);
}

CSS网格布局

我们继续为过滤后的元素指定一些样式。 最重要的是,我们根据屏幕尺寸使用CSS Grid进行不同的布局:

:root {
  --black: #1a1a1a;
  --white: #fff;
  --green: #49b293;
}

.posts {
  display: grid;
  grid-gap: 1.5rem;
  grid-template-columns: repeat(4, 1fr);
}

.posts .post {
  background: #fafafa;
  border: 1px solid rgba(0, 0, 0, 0.1);
}

.posts .post-title {
  font-size: 1.3rem;
}

.posts .post-title:hover {
  text-decoration: underline;
}

.posts figcaption {
  padding: 1rem;
}

.posts .post-categories {
  margin-bottom: 0.75rem;
  font-size: .75rem;
}

.posts .post-categories * {
  display: inline-block;
}

.posts .post-categories li {
  margin-bottom: 0.2rem;
}

.posts .post-categories a {
  padding: 0.2rem 0.5rem;
  border-radius: 1rem;
  border: 1px solid;
  line-height: normal;
  background: all 0.1s;
}

.posts .post-categories a:hover {
  background: var(--green);
  color: var(--white);
}

@media screen and (max-width: 900px) {
  .posts {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media screen and (max-width: 650px) {
  .posts {
    grid-template-columns: repeat(2, 1fr);
  }
}

注意:出于可读性原因,在我们CSS中,我们不对通用CSS规则进行分组。

添加过滤样式

这里的想法非常简单。 每次我们单击过滤器时,仅应显示相应的过滤元素(帖子)。 为了实现该功能,我们将结合使用以下CSS好东西:

当我们单击All过滤器时,将显示所有具有data-category属性的帖子:

[value="All"]:checked ~ .posts [data-category] {
  display: block;
}

当我们单击任何其他过滤器类别时,将仅显示目标帖子:

[value="CSS"]:checked ~ .posts .post:not([data-category~="CSS"]),
[value="JavaScript"]:checked ~ .posts .post:not([data-category~="JavaScript"]),
[value="jQuery"]:checked ~ .posts .post:not([data-category~="jQuery"]),
[value="WordPress"]:checked ~ .posts .post:not([data-category~="WordPress"]),
[value="Slider"]:checked ~ .posts .post:not([data-category~="Slider"]),
[value="fullPage.js"]:checked ~ .posts .post:not([data-category~="fullPage.js"]) {
  display: none;
}

例如,只要我们单击“ Slider过滤器类别,只有属于“ Slider类别的帖子才可见。

值得一提的是,在我们的风格,而不是上面的[att~=val]语法,我们同样可以使用了[att*=val]语法。 细微的变化如下所示:

[value="CSS"]:checked ~ .posts .post:not([data-category*="CSS"]),
[value="JavaScript"]:checked ~ .posts .post:not([data-category*="JavaScript"]),
[value="jQuery"]:checked ~ .posts .post:not([data-category*="jQuery"]),
[value="WordPress"]:checked ~ .posts .post:not([data-category*="WordPress"]),
[value="Slider"]:checked ~ .posts .post:not([data-category*="Slider"]),
[value="fullPage.js"]:checked ~ .posts .post:not([data-category*="fullPage.js"]) {
  display: none;
}

快速CSS选择器说明

这个选择器到底在说什么?

第一位[value="CSS"]:checked查找具有特定值(在这种情况下为“ CSS”)的选中的单选按钮。

在那之后,代字号(〜)是我们今天所称的“后续兄弟选择器”。 它选择与上一个元素具有相同父元素的元素,即使它们没有立即跟随标记。 所以~ .posts .post寻找元素.posts .post与被检查的单选输入共享相同的父元素。

为了更具体, :not([data-category~="CSS"])将选择器优化为仅那些不具有data-category属性的.post元素,该属性在空格内某处包含CSS值清单。

然后应用display: none; 符合这些条件的任何元素。

这是一个非常复杂的选择器,即使它完全合乎逻辑。 用人类语言术语,您可以将其描述为:

“当选中值为“ CSS”的收音机时,请在其数据类别列表中找到所有不包含“ CSS”的后继元素,并将其隐藏。”

造型的最后一点

最后,我们添加一个规则来突出显示活动过滤器类别:

:root {
  --black: #1a1a1a;
  --white: #fff;
  --green: #49b293;
}

[value="All"]:checked ~ .filters [for="All"],
[value="CSS"]:checked ~ .filters [for="CSS"],
[value="JavaScript"]:checked ~ .filters [for="JavaScript"],
[value="jQuery"]:checked ~ .filters [for="jQuery"],
[value="WordPress"]:checked ~ .filters [for="WordPress"],
[value="Slider"]:checked ~ .filters [for="Slider"],
[value="fullPage.js"]:checked ~ .filters [for="fullPage.js"] {
  background: var(--green);
  color: var(--white);
}

3.辅助功能

默认情况下,可以很好地访问此过滤。 感谢单选按钮和标签的本机工作方式,我们可以使用键盘按键过滤项目。 首先按Tab键将焦点移至选中的单选按钮。 接下来,按箭头键将焦点和选择移至其他单选按钮。 自己尝试:

就是说,我们尚未真正关注可访问性,因此可能还有其他一些方面需要改进。

结论

就是这样! 仅使用一些CSS规则和一些结构化的标记,我们就可以构建一个功能齐全的过滤组件。

我希望您喜欢这个练习,它对您对CSS选择器的理解有所帮助。 一如既往,感谢您的阅读!

翻译自: https://webdesign.tutsplus.com/tutorials/how-to-build-a-filtering-component-in-pure-css--cms-33111

父组件修改子组件css

pure-css:纯CSS UI组件 纯css 纯CSS UI组件 情态的 标签 手风琴 灯箱 个人资料卡 转变 图示 进度条 立即下载

相关推荐

organic:Organic 是一个用于 CSS 框架的纯 css 标签组件

有机 CSS Organic 是用于 CSS 框架(如 Bootstrap 等)的纯 css 标签组件。 Organic 不想成为一个框架,但他们的使命是为开发人员提供更好的用户界面。 所有功劳都保留给为此框架做出贡献的开发人员。 安装: To build you need NojeJS and LESS compiler and plugin "clean-css" for Less. You can see how to install above: 1. Install NodeJS (You can find how to install it for your environment on Google) 2. npm install -g less 3. npm install -g less-plugin-clean-css 定制: If you want cus

如何在父组件中设置修改子组件的样式

上周去面试,被问到了一个问题,如何在某个vue父组件中去设置子组件的的某一个样式? 以Element-ui为例,我当时使用element-ui的时候,去修改样式是直接在最外部的全局css中去覆盖原有类名的样式,但是这样子做会导致以后修改样式比较麻烦,不方便修改。也有试过把style中的scoped去掉,但是也没办法影响到element-ui的组件样式,而且去掉scoped后,该组件的样式可...

Vintage 1万+

别再手动跑定时任务了!Spring Boot项目5分钟集成xxl-job保姆级教程(含Docker部署调度中心)

本文提供Spring Boot项目快速集成xxl-job的保姆级教程,包括Docker部署调度中心的详细步骤。通过实战案例展示如何构建企业级分布式任务调度系统,解决传统定时任务的资源竞争、单点故障等问题,提升开发效率与系统可靠性。

weixin_30315905的博客 292

css

学习目标: 1掌握form表单和表单的细节 2熟悉css样式的3种引入方式 3熟悉css选择器的使用 4了解盒子模型 1.CSS技术 1.1.CSS是什么? Cascading style sheet Css就是层叠样式表,用来控制页面内容的样式。 Css就像女人使用的化妆品一样。各种化妆品有不同效果。口红涂在嘴唇上,口红可以分各种不同的颜色。腮红涂在腮上。 所以css可以修饰html页面中各种各...

孙砚秋的博客 484

微软Media Creation Tool 创建工具 1.3 升级:支持全新下载安装Win11 22H2 Build 22621.525

微软 Media Creation Tool 创建工具 1.3 升级:支持全新下载安装 Win11 22H2 Build 22621.525 ISO 镜像,如果今天运行使用 Media Creation Tool,则会下载 Windows 11 2022 版本 Build 22621.525,它不会向操作系统添加任何新内容,但会修复安装问题,下面来看看详细的更新内容。

zym0218的博客 4238

vivado实现SDI接口

XAPP1249,用来介绍UHD_SDI的实现。

Huskar_Liu的博客 7078

纯css实现树形组件样式(自用笔记)

使用纯css实现树形组件,整体结构需要利用到 details和 summary,它们天然地支持内容展开和收起。特别说明:以下所有例子代码都是在react项目中进行。

DT_XUE321的博客 1145

详解Numpy中的transpose方法

最近在学Numpy碰到了关于数组转置和换轴的概念,尤其是对tanspose方法有些疑惑,尤其是多维,查了不少资料,终于搞懂了。 Numpy数组的轴(axis) 所谓的**轴(axis)**可以理解为数组的维度。 具体而言,二维数组就是有两个维度,如果从空间上看,它就是一个平面,由x轴和y轴构成,而与此相对应的,该二维数组就有两个轴,x轴对应0轴,y轴对应1轴。 同理,三维数组有三个维度,空间上...

BlankGrid的博客 939

探索无JavaScript的纯CSS组件库 —— Pure CSS Components

在这个日益复杂的Web开发世界中,有时候回到基础并简化事情是极有吸引力的。这就是Pure CSS Components项目的意义所在,它是一套仅由CSS驱动的常见UI组件,无需任何JavaScript代码就能实现功能。让我们一起深入了解这个独特的开源项目。 ## 项目介绍 Pure CSS Components是一个古老的但仍然有价值的项目,由Felipe Fialho在2014年创建。尽管现

gitblog_00054的博客 758

Transformer实战(40)——Transformer时间序列数据建模

Transformer 因其在自然语言处理 (Natural Language Processing, NLP) 任务中的优异表现而被广泛应用,其主要优势在于能够有效建模时间序列数据。这些数据可以是文本,也可以是非文本。本节将介绍如何使用 Transformer 进行时间序列数据建模和预测,将学习时间序列的基本概念,并在此基础上使用一个简单的模型,用以初步了解时间序列数据,并为各种预测任务奠定基础。

盼小辉丶的博客 2414

uniapp [安卓苹果App端] - 实现微信支付功能+拉起微信付款支付后返回本app页面,详解uniApp如何唤起本机微信app并跳转到支付页面全流程及示例源码(uniapp实现微信支付,可打包)

uni-app项目在APP端使用微信支付功能,uniapp前端实现微信支付,uniapp开发安卓App对接微信支付,uniapp苹果ios唤起微信支付,uniapp调用微信支付uniapp开发app-调用微信支付,uniapp开发安卓苹果app如何接入微信支付,前后端应该怎么做,UniApp中实现微信支付功能,支付报错,调起失败没响应,uniapp苹果微信支付唤起实现,app唤起微信支付,拉起微信支付,uniapp中唤醒微信进行支付并返回app,uniApp调起微信支付失败报错,全网最详细的uniapp微信

🏆 前端领域优质创作者 1万+

VUE2 学习笔记12 ref、父子组件传参、mixin

要注意,在父子组件传值的过程,如果key:value不是使用绑定变量的形式,而是使用固定的写在标签上的value传递,那么value值默认是字符串,对字符串进行加操作,会进行字符串拼接。中部列表框,列表显示已经有的TodoList列表,列表内部还有一个子组件,这个子组件控制每条列表数据;在对组件进行复用时,有时候,不同地方的组件,需要显示某些不一样的信息,这就可以通过父子组件传参来进行操作,在父组件使用子组件标签时,传入父组件指定的数据,子组件显示父组件传入的数据,这个功能可以通过props实现。

mashirokayo的博客 1027

基于Python的Steam游戏评论与销量数据爬取及预测分析

随着数字游戏市场的蓬勃发展,Steam作为全球最大的数字游戏分发平台,积累了海量的游戏数据与玩家行为数据。本文旨在通过Python网络爬虫技术,采集Steam平台的游戏基本信息、玩家评论数据及销量相关信息,为后续的游戏评论情感分析与销量预测模型构建提供数据支持。本文将详细介绍使用requestsselenium等库实现Steam数据爬取的全过程,并提供完整的代码实现与数据处理方法。关键词:Steam;Python爬虫;数据采集;评论分析;销量预测。

2201_76125261的博客 855

Angular子组件接收异步数据的3种实战方案

在前端开发中,父组件向子组件传递异步数据(如Observable或Promise)是常见需求,其本质涉及响应式编程、变更检测机制与生命周期协同。Angular通过async管道、BehaviorSubject和ngOnChanges三种机制提供不同抽象层级的支持:async管道将订阅交由模板层自动管理,兼顾类型安全与内存安全;BehaviorSubject支持子组件主动参与数据流编排,适用于搜索、防抖等复杂交互;ngOnChanges则基于输入属性引用变化触发响应,适合轻量同步场景。三者分别对应‘声明式消费

weixin_33754065的博客 281

13、7自由度机械臂混合逆运动学算法解析

本文介绍了一种针对7自由度机械臂的混合逆运动学算法,通过引入额外参数Φ解决冗余自由度问题,并实现了避障、避免关节超限和扩大工作空间。该方法采用解析逆运动学求解策略,克服了机械臂在奇异位姿时的配置不连续性问题。通过对比实验验证了该算法在腕部关节角度连续性和位姿可达性方面的优越性,同时结合躯干逆运动学显著扩展了机械臂的工作空间。

rgv23456789的博客 238

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

vue 请求在子组件加载后了_Vue 前端面试题

前几天整理了一些 html + css + JavaScript 常见的面试题(https://segmentfault.com/u/youdangde_5c8b208a23f95/articles),然后现在也是找了一些在 Vue 方面经常出现的面试题,留给自己查看消化,也分享给有需要的小伙伴。如果文章中有出现纰漏、错误之处,还请看到的小伙伴留言指正,先行谢过。以下 ↓1. 说一下 Vue 的双...

weixin_39637920的博客 189

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

vue. props validator 过滤器为什么没有效果?

<template> <div class="hello"> <h1>我是text1组件--局部组件 -- {{msg}}</h1> </div> </template> <script> export default { name: 'text1', props: { // ms...

qq_42692714的博客 1117

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

elementui树状菜单tree_Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)...

这篇博客主要介绍树形控件的两个小小的功能:下拉菜单输入过滤框以CSS样式为主,也会涉及到Vue组件和element组件的使用。对于没有层级的数据,我们可以使用表格或卡片来展示。要展示或建立层级关系,就一定会用到树形组件了。使用Vue + Element UI,构建出最基本的树如下图所示:现在我们就要在这个基础上进行改造,使页面更加符合我们的交互场景。下拉菜单将下拉菜单嵌到树节点中,使操作更加简便、...

weixin_39770416的博客 1738

vue组件机制

一、概述 组件可以拓展HTML元素,内部封装了可复用的HTML、CSS、JS代码。 组件类似于vue实例,组件内部有template属性,用于指定模板,vue实例内有el属性,用于指定模板 二、组件定义 let component1 = { data(){ //返回对象值唯一拷贝,保证复用的组件内部数据不会相互影响 return{ comMsg:'组件数据', } },

ZZ13593580786的博客 175

vue 列表引用子组件 后面覆盖前面的_使用 React 与 Vue 创建同一款 App,差别究竟有多大?...

你是否尝试过使用前端主流框架 Vue.js 和 React 来创建同一个 App?相比之下,哪种更好呢? 众所周知,Vue 和 React 都是目前非常著名的前端框架。我在工作中经常使用 Vue,因此我对它有很深入的了解。同时,我也对 React 充满了好奇,想要学习一下,一探究竟。 于是我阅读了 React 文档并观看了一些视频教程,虽然这些资料很不错,但是我真正想了解的是 React 与 V...

weixin_32098487的博客 379

vue样式穿透------深度选择器

原作者链接:https://www.jianshu.com/p/30c797bb0069 前言 vue的style中设置scoped属性后,组件实现样式私有化。 但是该组件又使用的其他组件库时(vant,elementui,自定义等),该组件的style中的样式,优先级低,不生效,这个时候需要使用样式穿透(作用得更深)。 一、scoped底层原理 scoped是通过在DOM以及css中加上data-v-xxx唯一标识来实现样式私有化。 1.加上scoped前 <template> &lt

qq_45716607的博客 981

开发问题随笔

1、不允许子组件直接改变父组件的数据,但是往往项目需求需要改变父组件的数据,那我们如何变通呢? 如果不想影响父组件的值,我们也可以用JSON颠倒转换的方式,在mounted方法中进行深拷贝,在data中初始化数据时用另一个变量作为承载,这样才承载变量改变,就不会影响父组件该变量的值了。 ...

huohuoit的博客 173

vue面试题

Vue

byyourself10的博客 525

Vue基础入门3——directives 自定义指令、filters 过滤(管道)、components 组件、动画,以及最后的vue的选项

directives 自定义指令、filters 过滤(管道)、components 组件、动画,以及最后的vue的选项

wsxokn945的博客 540
上一篇: qfile 从头开始_从头开始构建HTML电子邮件模板
下一篇: css 排版_Web排版的未来:CSS字体4级
daique1908
博客等级 码龄10年 29粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值