【转载】CSS3之Clip(裁剪)拓展阅读

2023-10-27

Clip属性是大家经常会误解的一个属性,这篇文章帮助大家充分的了解和学习clip属性,用这个属性制作出更好的效果。

我可以确定Clip属性有很多同学并不知道,因为这个属性使用率非常的底,我初次接触是在Drupal的主题之中,他们有一段用来隐藏文本的代码,就是使用的clip属性。

/* Hide only visually, but have it available for screenreaders*/ .visuallyhidden {   border: 0 none !important;   clip: rect(1px 1px 1px 1px);/*IE<8*/   clip: rect(1px,1px,1px,1px);   height: 1px !important;   margin: -1px;   overflow: hidden;   padding: 0 !important;   position: absolute !important;   width: 1px; }	 

如果你不知道也不用担心,接下来的内容将会涵盖clip属性的各个方法。详细阅读这篇文章,你将对clip属性有一个很深的了解。

Clip属性在W3C官网是这样进行描述的:“通过对元素进行剪切来控制元素的可显示区域,默认情况下,元素是不进行任何剪切的,但是也有可能剪切区域也显示的设置了clip属性”。

大家应该看过使用javascript的插件来剪切元素,但是你也可以使用CSS的clip属性实现,也许会有一些限制,但我们可以一起看看。

语法:

想要了解clip属性,我们很有必要先学习clip的语法知识:

.selector { 	clip: <shape>  auto  inherit }	 

首先你要注意:clip属性只能在元素设置了“position:absolute”或者“position:fixed”属性起作用。clip无法在设置“position:relative”和“position:static”上工作。

说实话,我真的不知道为什么是这样的。至少,我在网络上没有发现任何有关于这方面的话题,因此,如果你要是知道为什么,希望您能在下面的评论中分享一些知识。

上面的语法告诉我们,clip属性只接受三个不同的属性值:

  1. <shape>:shape是一个函数功能,当使用仅使用rect()属性;
  2. auto:这是一个默认值,clip设置auto值和没有进行剪切是一样的效果;
  3. inherit:继承父元素的clip属性值。

很多时候,你可能希望有更多的shape函数功能使用,比如说rect()和circle()等,但是到目前为止仅有rect()函数可使用,不过不用担心,这个功能就可以帮我们制作很多很酷的效果。

Rect()使用

接下来我们来看rect()使用方法。rect()需要设置四个值:top, right, bottom和left。他们之间需要用逗号隔开,而且rect()属性值和margin、padding以及bodrder具有一样的标准,遵循TRBL顺时针旋转的规则。

  clip: rect(<top>, <right>, <bottom>, <left>); 

在CSS2.1中,rect()和<top>和<bottom>指定偏移量是从元素盒子顶部边缘算起;<left>和<right>指定的偏移量是从元素盒子左边边缘算起。

clip

我们简单的来看一个例子:

p#one { clip: rect(5px, 40px, 45px, 5px); } p#two { clip: rect(5px, 55px, 45px, 5px); }	 

上面的例子是在50X55px的长方形盒子中是行剪切,得到虚线的长方形:

clip

<top>, <right>, <bottom>, <left>可以将值设置为“auto”或者长度值<length>。而且还可以充许负的长度值。其中取值为“auto”时,剪切区域的边缘和元素盒子边缘相同。例如:在<top>和<left>设置为auto时,他们就相当于top和left取值为0;如果<right>和<bottom>设置为auto时,他们就相当于元素的宽度(这个宽度包括元素的border、padding和width),或者简单的理解为100%。

针对上面所言,将clip分为以下几种:

1、不显示剪切区域:当rect()中的bottom值小于top值,或者right值小于left值时,整个剪切区域不会显示。例如:

.rect2 img {   clip: rect(13px,0,161px,30px);/*right值小于left值*/ } .rect3 img {   clip:rect(13px, 164px, 0, 30px);/*bottom值小于top值*/ }	 

2、top和left取值为auto,当top或者left取值为auto时,相当于取值为0;

.rect4 img {   clip: rect(auto, 164px, 161px, 30px); } .rect5 img {   clip: rect(13px, 164px, 161px, auto); }	 

clip

rect(auto,164px,161px,30px)效果

clip

rect(13px,164px,161px,auto)效果

3、bottom和right取值为auto,当bottom和right取值为auto时,相当于元素的100%宽度。

.rect6 img {   clip: rect(13px, auto, 161px, 30px); } .rect7 img {   clip: rect(13px, 164px, auto, 30px); }	 

clip

rect(13px,auto,161px,30px)效果

clip

rect(13px,164px,auto,30px)效果

3、bottom和right取值为auto,当bottom和right取值为auto时,相当于元素的100%宽度。

详细点击demo。

rect()不能支持百分比值,这一点需要特别的注意。

浏览器兼容性

你可能会很关注,这个属性的兼容性不知道如何?请放心,clip属性得到较好的支持,在chrome1.0+、firefox1.0+、opera7.0+、safari1.0+和ie8.0+都支持标准语法,但在ie4.0至ie7.0我们还是需要做一定的处理,需要把每个属性值之间的逗号去掉。

.my-element {   position: absolute;   clip: rect(10px  350px  170px  0); /* IE4 to IE7 */   clip: rect(10px, 350px, 170px, 0); /* IE8+ & other browsers */ }	 

需要特别的注意,ie4-ie7的要写在标准语句的前面,不然其他浏览器下将会无任何效果。

案例

上面是各种理论的讲解,接下来我们一起来动手做一个案例,通过clip实现行内sprites的效果。

clip

要制作上图的一个效果,我们平时都是使用三个图来制作,那么使用clip属性我们也可以在行内使用sprites图来实现上图的效果,这两者的区别我就不多说,大家看看他们的对比截图:

clip

图中说明一切,接下来我们主要看的是如何使用clip实现效果,先写个简单的HTML结构:

<ul id="wrapper"&ht;   <li&ht;<img src=http://www.webjx.com/css/"icons.png" alt="Happy Icon" class="icons happy" /&ht;</li&ht;   <li&ht;<img src=http://www.webjx.com/css/"icons.png" alt="Sad Icon" class="icons sad" /&ht;</li&ht;   <li&ht;<img src=http://www.webjx.com/css/"icons.png" alt="Angry Icon" class="icons angry" /&ht;</li&ht; </ul&ht;	 

一个很简单的结构,初步的效果如下:

clip

先来给他一个基本布局样式:

* {   margin:0;   padding: 0; }	  #wrapper {   position: relative;   width: 386px;   margin:50px auto;   list-style: none outside none; }	 #wrapper li {   width: 128px;   height: 128px;   float: left;   position: relative; }	 

此时效果如下:

clip

这离我们需要的效果还相差很远,接下来就需要clip来发挥他的功能了,我们简单先分析一下,对于这三个脸谱,距离顶部的距离都是“0”而距离底部都是“128px”,这样我们就确定两个参数了,只需要对每个脸谱确定left和right的参数。

先来看sad脍,他是在sprites图片的最左边,那么我们可以明显的确定他的另外两个值:left为0;right为128px,如下图所示:

clip

对于happy脸,我们在sprites图中间,根据相关参数,我们可以推算或者测量出其left值为128px,right值为256px,但这个时候有一个细节,我们使用clip进行剪切,前面会留有空白(也就是sad脸位置),为了能正常显示,需要在这个Img中设置一个left值为“-128px”,将happy拉出来:

clip

最后一张是angry脸,按前面的方法我们很容易的得到left值为256px,right值为384px(在这里也可以是auto,前面有讲过),同样前面有占位的,也需要用left值拉回来:

clip

详细代码如下:

.icons {   position:absolute;   top:0;   left:0; }  .happy {   clip: rect(0 256px 128px 128px);   left:-128px; }  .angry {   clip: rect(0 384px 128px 256px);   left:-256px; }  .sad {   clip: rect(0 128px 128px 0); }	 

如此一来,效果就出来了,大家可以点击这里查看效果。

这里展示的是仅是其中一个很简单的案例效果,其实你可以发挥你的想像力,配合一些css3的特效制作出一些很酷的效果。

这是一个很特殊的属性,也是一个很少见的属性,少见是由于他不被人了解,虽然他受限蛮多,但在一些情况下使用这个属性能轻松的帮你实现你需要的效果。而且这个属性使用也并不复杂。通过上面的介绍,大家应该对clip有所了解了。希望这篇文章能对大家有所收获。

转载于:https://www.cnblogs.com/xdxx/p/7395748.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【转载】CSS3之Clip(裁剪)拓展阅读 的相关文章

  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • 又一次自己编译Mono,这次是在Windows上,玩Bundle

    成功 又一次自己编译Mono 这次是在Windows上 玩Bundle 作者 V君 发布于 2017 10 30 21 07 Monday 分类 折腾手记 目标 将 net 应用程序用只用一个 exe 承载 并极大缩减体积 且能保证工作正常
  • Ansible的基础了解

    目录 第一章 Ansible概述 1 1 Ansible是什么 1 2 Ansible的特性和过程 1 3 ansible 具有如下特点 1 4 Ansible的四个组件 1 5 ansible 核心程序 1 6 ansible执行的过程
  • DevOps面试问题

    DevOps是一组过程 方法与系统的统称 用于促进开发 应用程序 软件工程 技术运营和质量保障 QA 部门之间的沟通 协作与整合 下面为大家分享DevOps系列的面试问题 持续整合问题 问题一 持续集成是什么意思 我将建议您通过给出持续集成
  • opencv分水岭算法分割硬币

    网上有Python写的 但是没有C 写的 所以自己搞了个 东拼西凑的结果 毕竟我也不是大神 凑活着看吧 倾情奉献 欢迎指教 include
  • H264码流RTP封装方式详解:rfc3984

    264码流RTP封装方式详解 文章目录 H264码流RTP封装方式详解 1 H264基本概念 2 NALU Header介绍 3 RTP封装H264码流 3 1 单一NALU模式 3 2 组合帧封装模式 3 3 分片封装模式 4 代码解析
  • Android多屏幕适配学习笔记

    http blog csdn net a220315410 article details 9139397
  • C++57个入门知识点_21_ 析构函数的调用(主程序结束前自动跳入对象析构函数,析构函数中使用free()函数就可实现对象资源的释放;内存泄漏:内存没有得到释放;不指定大小的数组定义方法:指针)

    上两篇C 57个入门知识点 19 构造函数的作用及写法 作用 用于对象初始化 定义时候就定义对象初值 写法 函数名是类名 不写函数返回值 参数可以有也可以没有 使用 CStudent stu 张三 C 57个入门知识点 20 构造函数的调用
  • 常用hadoop dfs命令

    创建目录 hadoop dfs mkdir home 上传文件或目录到hdfs hadoop dfs put hello hadoop dfs put hellodir 查看目录 hadoop dfs ls 创建一个空文件 hadoop d
  • 设计模式的设计原则

    为什么需要设计模式 我的理解设计模式就是一种针对某种问题的套路 是一套被反复使用 多数人所知晓的 经过分类编目的 代码设计经验的总结 1 开闭原则 1 1 定义 一个软件实体应当对扩展开放 对修改关闭 即软件实体应尽量在不修改原有代码下进行
  • gcc4.9 编译stdatomic.h 异常

    使用了 include
  • word总页数不包含封面_明明封面没有设置页码,但总页码为啥总是多一页?

    先别着急关掉 既然你点进来了 说明你曾经也遇到过这样的情况或者你正被Word文档的页码设置折磨着 你们的痛苦我都懂 我也曾被页码设置按在地上来回摩擦 甚至会有直接手动输入页码的冲动 不过你看过了这篇文章就不会再有标题中的困扰了 我们今天就来
  • php webscokt_websocket(示例php实现)

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 在 WebSocket API 中 浏览器和服务器只需要做一个握手的动作 然后 浏览器和服务器之间就形成了一条快速通道 两者之间就直接可以数据互相
  • USB总线电平标准、USB总线状态、USB总线信号详解

    来自 https hellocode blog csdn net article details 113639911 一 USB总线电平标准 USB总线电平标准如下 下图标识了低速 全速 高速总线输出特性的电平标准 二 USB总线状态 下图
  • 一个40岁老码农的总结,奋斗没有意义,选择大于努力(zz)

    一个40岁老码农的总结 奋斗没有意义 选择大于努力 转载 你的努力为什么没有意义 今年刚好 40 岁 在一家著名外企做到技术专家的位置 在亲戚朋友眼中 俨然已算半个 成功人士 但内心深处 却无一刻不战战兢兢 我知道 自己就像一个风雨中的高跷
  • Matlab基本操作和矩阵输入(郭彦甫视频学习笔记)

    who whos 查看工作区当前变量 clear 清空工作区的所有变量 慎用 clear valuable 清除变量valuable clc 清空命令行窗口 clear all 清除工作区所有变量 close all 关闭所有显示的图片 一
  • Android. 解决依赖冲突 Program type already present

    目录 常用引用 解决方案 在实际开发中 为了提高开发速度和效率 避免不了引用第三方提供的依赖和类库 如果含有相同依赖的类库被我们引用时 而他们的版本又不相同 就有可能会导致一系列问题和异常 常用引用 网络相关 okhttp retrofit
  • OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行

    前言 本篇博文是使用 32 位的 MinGW 在 Windows 下编译 OpenCV 生成 32 位的 dll 关于使用 64 位的 MinGW 编译 OpenCV 生成 64 位的 dll 见 OpenCV使用CMake和MinGW w
  • Spark基础概念

    概念 Spark 提供了一个全面 统一的框架用于管理各种有着不同性质 文本数据 图表数据等 的数据集和数据源 批量数据或实时的流数据 的大数据处理的需求 核心架构 Spark Core 包含Spark 的基本功能 尤其是定义RDD 的API
  • google v8使用示例

    概念解释 Handle V8里使用Handle类型来托管 JavaScript对象 与C 的std shared pointer类似 Handle类型间的赋值均是直接传递对象引用 但不同的是 V8使用自己的GC来管理对象生命周期 而不是智能
  • 【转载】CSS3之Clip(裁剪)拓展阅读

    Clip属性是大家经常会误解的一个属性 这篇文章帮助大家充分的了解和学习clip属性 用这个属性制作出更好的效果 我可以确定Clip属性有很多同学并不知道 因为这个属性使用率非常的底 我初次接触是在Drupal的主题之中 他们有一段用来隐藏