当前位置: 首页 > news >正文

细数那些惊艳一时的 CSS 属性

随着前端的不断发展,更多新的 CSS 属性不断加入提案,本文列举 7 个不常用但很有用且你见过也可能没见过的 CSS 属性,带大家领略 CSS 之美。

  1. position: sticky

在这里插入图片描述
不知道大家平时业务开发中有没有碰到像上图一样的吸顶的需求:标题在滚动的时候,会一直贴着最顶上。

这种场景实际上很多:比如表格的标题栏、网站的导航栏、手机通讯录的人名首字母标题等等。如果让大家自己动手做的话,是不是会用 js 结合 css 来实现呢?以前确实是这样的,直到后来 position 属性新增了一个属性值 sticky ,前端程序员才迎来了小春天。

// css 部分
.container {
    background-color: oldlace;
    height: 200px;
    width: 140px;
    overflow: auto;
  }
  .container div {
    height: 20px;
    background-color: aqua;
    border: 1px solid;
  }
  .container .header {
    position: sticky;
    top: 0;
    background-color: rgb(187, 153, 153);
}

// html 部分
<div class="container">
  <div class="header">Header</div>
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
  1. :empty 选择器

在这里插入图片描述

平时开发的时候数据都是通过请求接口获取的,也会存在接口没有数据的情况。这个时候正常的做法是给用户一个提示,让用户知道当前不是出 bug 了,而是确实没有数据。

一般的做法是我们人为的判断当前数据返回列表的长度是否为 0,如果为 0 则显示一个 “暂无数据” 给用户,反之则隐藏该提示。写过 Vue 的小伙伴是不是经常这么做:


<div>
    <template v-if="datas.length">
        <div v-for="data in datas"></div>
    </template>
    <template v-else>
        <div>暂无数据</div>
    </template>
</div>

但是有了 :empty 这个选择器后,你大可以把这个活交给 CSS 来干。

.container {
    height: 400px;
    width: 600px;
    background-color: antiquewhite;
    display: flex;
    justify-content: center;
    align-items: center;
}
.container:empty::after {
    content: "暂无数据";
}

通过 :empty 选中内容为空的容器,然后通过伪元素为空容器添加提示。是不是方便很多呢?
在这里插入图片描述

  1. gap

小伙伴们日常开发中,都有用过 padding 和 margin 吧,margin 一般用做边距,让两个元素隔开一点距离,但是对于一些场景下,我们很难通过计算得到一个除的尽的值,比如 100px 我要让 3 个元素等分,且每个元素隔开 10px,这就很尴尬了。

没关系!我们可以用 gap 属性,gap 属性它适用于 Grid 布局、Flex 布局以及多列布局,并不一定只是 Grid 布局中可以使用。

比如我们要让每个元素之间隔开 20px, 那么使用 gap 我们可以这样:

<div class="gapList">
      <div class="gapItem">1</div>
      <div class="gapItem">2</div>
      <div class="gapItem">3</div>
    </div>
    <style>
      .gapList {
        display: grid;
        gap: 20px;
        grid-template-columns: auto auto auto;
        height: 100px;
      }
      .gapItem {
        background: red;
      }
    </style>

在这里插入图片描述

  1. background-clip: text

单词clip是 修剪 裁剪 的意思;
大家都知道: background-clip 属性规定背景的绘制区域。
在W3C标准的它有三个值: border-box | padding-box | content-box;
动字面上来理解 分别是 以盒边界来裁剪 | 以内边距为边界来裁剪 | 以内容区域来裁剪

在这里插入图片描述

<div class="clip">小爱同学</div>
    <style>
      .clip {
        border: 1px solid red;
        font-size: 200px;
        font-weight: 900;
        /* width: 400px; */
        height: 300px;
        background: url(./clip.png) center center no-repeat;
        background-size: 100% 100%;

        -webkit-background-clip: text;
        color: transparent;
      }
    </style>

在这里插入图片描述

  1. user-select

很多人不知道这个属性是什么意思。
网页和 APP 有个不同点是,网页上的字是可以通过光标选中的,而 APP 的不行。

有的小伙伴可能会疑惑:那我网页上也用不着这个属性啊?

非也非也,我们知道现在很多新的技术产生,可以在 APP 上嵌套 webview 或者是网页,比如 Electron 做的 桌面端应用 ,大家没见过哪个桌面端应用是可以光标选中的吧?

而 user-select 属性可以 禁用光标选中 ,让网页看着和移动端一样。
以上个案例为主,没加这个属性,用户可以选中文字,加了就选中不了
在这里插入图片描述

  1. :invalid 伪类

:invalid 表示任意内容未通过验证的 input 或其他 form 元素。什么意思呢?举个例子。

 <form>
      <label for="url_input">Enter a URL:</label>
      <input type="url" id="url_input" />
      <br />
      <br />
      <label for="email_input">Enter an email address:</label>
      <input type="email" id="email_input" required />
    </form>
    <style>
      input:invalid {
        background-color: #ffdddd;
      }

      form:invalid {
        border: 5px solid #ffdddd;
      }

      input:valid {
        background-color: #ddffdd;
      }

      form:valid {
        border: 5px solid #ddffdd;
      }

      input:required {
        border-color: #800000;
        border-width: 3px;
      }

      input:required:invalid {
        border-color: #c00000;
      }
    </style>

在这里插入图片描述
有了 :invalid 属性后,我们就可以不用 JS 也能实现校验提示的效果了。

  1. :focus-within 伪类

:focus-within 表示一个元素获得焦点,或该元素的后代元素获得焦点,就会匹配上。啥意思呢?
在这里插入图片描述

 <style>
      form {
        border: 1px solid;
        width: 400px;
        height: 300px;
        display: flex;
        justify-content: center;
        align-items: center;
      }
      form:focus-within {
        box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.3);
        background-color: beige;
      }
    </style>
    <form>
      <input type="text" id="ipt" placeholder="请输入..." />
    </form>

相关文章:

  • 【C语言】你真的了解结构体吗
  • 可做题2(矩阵快速幂,乘法逆元,exgcd)
  • Mysql用户权限分配详解
  • 一文7个步骤从0到1教你搭建Selenium 自动化测试环境
  • 【网络安全工程师】从零基础到进阶,看这一篇就够了
  • 【C陷阱与缺陷】----语法陷阱
  • 解忧杂货铺(五续集):用了无法离开的网站资源
  • 功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂
  • iOS 紧急通知
  • 艹,终于在8226上把灯点亮了
  • Linux上用Samba建立共享文件夹并通过Linux测试
  • shell简单使用介绍
  • 关于中级开发工程师常问的面试题
  • 蓝桥杯刷题第二十天
  • 二叉树(数据结构系列9)
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【Linux系统编程】快速查找errno错误码信息
  • Linux各目录及每个目录的详细介绍
  • Spring-boot 启动时碰到的错误
  • underscore源码剖析之整体架构
  • vue:响应原理
  • Web Storage相关
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 工程优化暨babel升级小记
  • 理解在java “”i=i++;”所发生的事情
  • 理清楚Vue的结构
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 手机端车牌号码键盘的vue组件
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 用简单代码看卷积组块发展
  • 由插件封装引出的一丢丢思考
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • (0)Nginx 功能特性
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot教学评价 毕业设计 641310
  • (一)UDP基本编程步骤
  • .NET Core 成都线下面基会拉开序幕
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20171106]配置客户端连接注意.txt
  • [C++]运行时,如何确保一个对象是只读的
  • [GXYCTF2019]禁止套娃
  • [jobdu]不用加减乘除做加法
  • [JS入门到进阶] 哎,被vite小坑了一波,大家记得配置build.cssTarget为‘chrome61‘
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算
  • [one_demo_14]一个简单的easyui的demo
  • [POJ 2406]Power Strings[KMP]
  • [SAP ABAP开发技术总结]面向对象OO
  • [SRM603] WinterAndSnowmen
  • [WCF安全系列]谈谈WCF的客户端认证[用户名/密码认证]