如何设置让背景颜色不包括 padding 部分,顺带全面学习 background-clip 属性(可以实现文字渐变)

先解决需求

实现背景颜色不包括 padding 部分,直接给容器添加 css 属性:background-clip:content-box;
示例代码:

.content-box-example {
  background-color: lightblue;
  padding: 20px;
  border: 1px solid black;
  background-clip: content-box;
}

学习背景

我主要是在布局网页的时候使用 flex 布局,对三列子元素设置 flex:1 进行平分,但是如果给其中两个子元素加上 margin-right 的话就会发现子元素会连同 margin-right 的值一起撑开,实际内容(不包括 margin 的部分)并不会三等分宽度。

所以我就想着使用 padding 来代替 margin,因为默认情况下 padding 会计入元素的总宽度和高度计算中,而 margin 并不会。父元素的背景会作用在子元素的 margin 区域,所以就想着如果背景不包括 padding 部分,那么就可以解决这个问题。

接下来我们系统学习一下 background-clip 属性。

ps:其实这个三等分效果也可以使用 grid 布局结合 gap 来实现,更加方便,但是 grid 布局浏览器支持性没有 flex 广,兼容性不如 flex,而且这篇文章主要是为了介绍 background-clip 属性,有兴趣的朋友可以自己使用 grid 布局实现一下这个效果。

关于 background-clip

文章最后有所有background-clip 属性的实战效果图和源码。

基础介绍

单词 background-clip 的字面意思就是背景裁剪,表示让背景作用于容器的哪个区域。最常用的有三个值: background-clip:content-box
background-clip:padding-box
background-clip:border-box。默认情况下根据浏览器的默认的盒子模型,background-clip 的默认值是background-clip:padding-box就是说背景生效的范围包括 padding 和 content。

浏览器的盒子模型,注意并没有 margin-box 这一说法
在这里插入图片描述

属性值

background-clip:content-box

这个值指定背景只在内容区域绘制,不包括内边距(padding)和边框(border)。这意味着背景颜色或图像不会延伸到内边距中。

.content-box-example {
  background-color: lightblue;
  padding: 20px;
  border: 1px solid black;
  background-clip: content-box;
}

此例中,元素的背景色只填充内容区域,内边距显示的是元素所在父级的背景色或透明。

background-clip:padding-box

这是默认值,表明背景会延伸到内边距但不包括边框。即背景同时应用于内容和内边距区域。

示例:

.padding-box-example {
  background-color: lightgreen;
  padding: 20px;
  border: 1px solid black;
}
/* 默认行为,显式声明可增强代码可读性 */
.padding-box-example {
  background-clip: padding-box;
}

这里,背景颜色会填满内容和内边距区域,边框外则无背景。

background-clip:border-box

背景不仅覆盖内容和内边距区域,还会延伸到边框的下层。这是说,边框之下会有背景,但边框本身不会被背景色覆盖。

示例:

.border-box-example {
  background-color: lightyellow;
  padding: 20px;
  border: 1px solid black;
  background-clip: border-box;
}

背景颜色会扩展到整个元素,包括边框下方,但边框线自身颜色不变。

background-clip:inherit

使元素继承其父元素的 background-clip 值。

示例:

.parent {
  background-clip: padding-box;
}

.child {
  background-clip: inherit;
}

子元素将采用与父元素相同的背景裁剪方式。

background-clip:initial

将 background-clip 属性设置为其初始值,即 padding-box。

示例:

.initial-clip-example {
  background-clip: initial; /* 等同于 padding-box */
}

这将重置任何先前设置,使背景裁剪回到默认行为。

background-clip:unset

将 background-clip 的计算值设置为其父元素的值,如果父元素没有设置,则回退到初始值(padding-box)。

示例:

.unset-clip-example {
  background-clip: unset;
}

如果父元素有设置 background-clip,则继承该值;否则,使用默认值。

background-clip:text

允许背景应用到文本上而不是元素的背景区域,常用于实现文本渐变色等效果。

示例:

.text-clip-example {
  background-image: linear-gradient(to right, red, orange);
  -webkit-background-clip: text;
  color: transparent;
}

注意,-webkit-background-clip: text; 是为了兼容性,因为并非所有浏览器都支持将背景裁剪到文本上。

总结

本文章通过一个需求来引申出一个让背景不包括 padding 的功能,进而系统学习背景裁剪属性 background-clip。包含丰富的讲解和实战示例。有收获的话可以点个赞哟!欢迎留言交流。

效果和源码

效果图
在这里插入图片描述

源码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style>
    html, body {
      margin: 0;
      padding: 0;
      height: 100vh;
    }
    .container {
      width: 400px;
      display: flex;
      flex-wrap: wrap;
      background-color: antiquewhite;
      /* background-clip: content-box; */
    }
    .content-box-example {
      background-color: lightblue;
      padding: 20px;
      border: 1px solid black;
      background-clip: content-box;
    }
    .padding-box-example {
      background-color: lightgreen;
      padding: 20px;
      border: 1px solid black;
      /* 默认行为,显式声明可增强代码可读性 */
      background-clip: padding-box;
    }

    .border-box-example {
      background-color: blue;
      padding: 20px;
      /* border包含blue,可以把0.3改成0看效果 */
      border: 5px solid rgba(255, 0, 0, 0.3);
      background-clip: border-box;
    }
    .inherit-clip-example {
      .parent {
        background-clip: border-box;
        border: 2px solid black;
        padding: 5px;
        /*  */
        background-color: blueviolet;
      }

      .child {
        background-clip: inherit;
        border: 2px solid black;
        padding: 5px;
        background-color: yellowgreen;
      }
    }

    .initial-clip-example {
      background-color: aquamarine;
      background-clip: content-box;
      /* padding是container的背景色 */
      padding: 5px;
      border: 2px solid black;
      .child {
        background-clip: initial; /* 等同于 padding-box */
        background-color: blueviolet;
        /* padding是自己的背景色 */
        padding: 5px;
      }
    }

    .unset-clip-example {
      /* container没有设置background-clip */
      background-clip: unset;
      /* padding是自己的背景色 */
      padding: 20px;
      background-color: red;
    }

    .text-clip-example {
      width: 100px;
      background-image: linear-gradient(to right, red, orange);
      -webkit-background-clip: text;
      color: transparent;
      font-size: 20px;
    }
  </style>
  <body>
    <div class="container">
      <div class="content-box-example">content-box</div>
      <div class="padding-box-example">padding-box</div>
      <div class="border-box-example">border-box</div>
      <div class="inherit-clip-example">
        <div class="parent">
          <div class="child">inherit-clip</div>
        </div>
      </div>
      <div class="initial-clip-example">
        <div class="child">initial-clip</div>
      </div>
      <div class="unset-clip-example">unset-clip</div>
      <div class="text-clip-example">文字渐变</div>
    </div>
  </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673852.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue项目出现多次ElMessage弹框

问题&#xff1a; 解决方法&#xff1a; let message null if (message null) { message ElMessage.error(“登录过期,请重新登录”); } 最终效果&#xff1a;只出现一个弹框

AI大模型在穿戴设备健康中的心率深度融合与案例分析

文章目录 1. 架构设计2. 应用场景3. 实现步骤3.1 步骤1&#xff1a;数据预处理3.2 步骤2&#xff1a;边缘计算初步分析3.3 步骤3&#xff1a;数据上传到云端3.4 步骤4&#xff1a;云端复杂分析3.5 步骤5&#xff1a;深度学习模型训练与部署 4. 云端API设计4.1 安装Flask4.2 API…

centos7.8安装Mysql8.4

在集群中我们选择将Mysql安装在slave01节点上。 1.在官网下载mysql安装包MySQL :: Download MySQL Yum Repository 下载后上传到slave01节点的/opt/software目录下。 2.切换到root用户下&#xff08;切换到root用户操作&#xff09; 3.查看和删除安装的MySQL软件包和依赖包 r…

logback删除日志文件和文件夹

​​​​​一&#xff0c;事由和源码 logback版本1.2.11 网上找了很多都是无法删除文件夹的&#xff0c;原先使用的TimeBasedRollingPolicy无法删除日志的文件夹&#xff0c;有很多空的日期文件夹&#xff0c;于是查看TimeBasedRollingPolicy源码发现有校验不删除文件夹&#x…

k8s练习--StorageClass详细解释与应用

文章目录 前言StorageClass是什么 一、实验目的配置过程 二、实验环境实验步骤一、配置网络存储NFS&#xff1a;1.主机基础配置2.配置 NFS: 二、开启rbac权限:三、创建nfs-deployment.yaml四、创建storageclass资源五、验证&#xff1a;1&#xff0e;创建PVC验证2.创建一个pod验…

Pycharm SSH远程连接时出现报错,测试 SFTP 连接,连接到 ‘connect.westb.seetacloud.com‘ 失败

问题由来 很离谱&#xff01;今天本来打算租借AutoDL的显卡完成一项深度学习的任务&#xff0c;很离谱的是同步文件夹的时候报了标题说的错。 就很莫名奇妙&#xff0c;一天都在网上找解决办法&#xff0c;结果都不对头。 其他报错 最后摸索着&#xff0c;在使用pycharm远程登…

基于django | 创建数据库,实现增、删、查的功能

1、在cmd中&#xff0c;输入指令进入mysql终端&#xff1a; mysql -u 用户名 -p 2、输入mysql的密码 3、输入指令&#xff0c;显示出所有的数据库 show databases; 4、输入指令创建表&#xff1a; create table 表名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 5、use …

Pr 2024下载安装,Adobe Premiere专业视频编辑软件安装包获取!

Premiere Pro&#xff0c;简称PR&#xff0c;无论是想要剪辑家庭录像&#xff0c;还是制作专业的影视作品&#xff0c;Premiere Pro都能为您提供强大的支持。 Premiere Pro以其卓越的编辑功能和强大的性能&#xff0c;助力用户在视频创作的道路上不断突破自我。 它具备丰富的视…

【python科学文献计量】关于中国知网检索策略的验证,以事故伤害严重程度检索为例

关于中国知网检索策略的验证,以事故伤害严重程度检索为例 1 背景2 文献下载3 数据处理1 背景 由于要进行相关研究内容的综述,需要了解当前我国对于事故伤害严重程度的研究现状,采用国内较为知名的检索网站(中国知网)进行文献数据集检索 由于最近知网出bug,检索的结果在…

521源码-源码下载-WordPress报错:Allowed memory size of 134217728 bytes exhausted错误解决方法

在wordpress中使用站内搜索或者打开一个页面时提示错误&#xff1a; Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) 致命错误:允许耗尽内存大小为134217728字节(试图分配20480字节) 分析&#xff1a;经过检查发现&#x…

Sentinel限流学习

Sentinel限流学习 初识Sentinel运行sentinel雪崩问题服务保护技术对比微服务整合Sentinel 限流规则簇点链路 流控模式-关联流控模式-链路流控模式有哪些&#xff1f; 流控效果流控效果-warm up流控效果-排队等待 热点参数限流隔离和降级Feign整合Sentinel线程隔离有两种方式实现…

【conda】解决conda activate无效的问题

conda activate 虚拟环境名字执行上述命令失效&#xff0c;提示如下信息&#xff1a; 经查询&#xff0c;原因是新版的 conda 不再使用 activate 来激活虚拟环境&#xff0c;而是改用&#xff1a; source activate 虚拟环境名退出虚拟环境还是&#xff1a; conda deactivate…

小米员工自爆:35岁被裁后,投百份简历无人问津,一气之下把薪资由2W调为3W,简历改成英文,结果出乎意料

“35岁”&#xff0c;就像职场里一道无形的门槛&#xff0c;压得人喘不过气。一旦迈过这道坎&#xff0c;焦虑、迷茫、恐慌&#xff0c;接踵而至。 最近&#xff0c;我的朋友老张&#xff0c;就真切地体会到了这种“中年危机”。刚过36岁生日&#xff0c;他就收到了来自小米的裁…

【数据结构与算法(C 语言)】队列 --链队列

1. 前言 1.1 定义 队列&#xff1a;一种先进先出(first in first out,缩写 FIFO)的线性表。 队尾&#xff1a;允许插入的一端&#xff08;rear&#xff09; 队头&#xff1a;允许删除的一端 (front&#xff09; 用链表标识的队列简称 链队列 1.2 队列示意图 2. 链队列存储结构…

Android Studio插件开发 - Dora SDK的IDE插件

IDE插件开发简介 Android Studio是一种常用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发Android应用程序。它提供了许多功能和工具&#xff0c;可以帮助开发人员更轻松地构建和调试Android应用程序。 如果你想开发Android Studio插件&#xff0c;以下是一…

MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

一、开发方式 MyBatis-Dao层Mapper接口化开发 二、注意事项 1、Mapper接口与Mapper.xml映射文件要满足4个对应 &#xff08;1&#xff09;Mapper接口的全类名必须与Mapper映射文件中的namespace相同 &#xff08;2&#xff09;Mapper接口中的每一个方法名在Mapper映射文件…

密码加密及验证

目录 为什么需要加密&#xff1f; 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密&#xff1f; 在MySQL数据库中&#xff0c;我们常常需要对用户密码、身份证号、手机号码等敏感信息进…

pod 控制器介绍

一 pod 控制器相关理论介绍 1&#xff0c;Pod控制器 是什么 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层&#xff0c;确保pod资源符合预期的状态&#xff0c;pod的资源出现故障时&#xff0c;会尝试进行…

使用modbus-serial 库搭配 modbus slave 通过 modbus tcp client 协议来 写入 modbus 寄存器值

使用modbus-serial 库对modbus slave 写入寄存器值 modbus tcp client 代码 目标电脑&#xff08;启动modbus slave 的电脑&#xff09;ip为 192.168.3.46&#xff0c;端口502 // 读取另一台电脑&#xff0c;192.168.3.46:502 Modbus TCP // create an empty modbus client c…

2005NOIP普及组真题 4. 循环

线上OJ&#xff1a; 【05NOIP普及组】循环 核心思想&#xff1a;高精度 1、本题用到了标准的高精度乘法模板 void init(int a[]) //传入一个数组 {string s; cin >> s; //读入字符串s a[0] s.length(); //用a[0]计算字符串s的位数 for(i 1; i < a[0]; i) a[i] …