热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

可视化效果(Visualeffects)

Overflowandclipping一般地,一个块盒的内容都被限制在该盒的content边内。某些情况下,一个盒可能会溢出,意味着它的部分内容或者全部内容位于该盒外部,例如:一行

Overflow and clipping

一般地,一个块盒的内容都被限制在该盒的content边内。某些情况下,一个盒可能会溢出,意味着它的部分内容或者全部内容位于该盒外部,例如:

  • 一行无法拆分,导致行盒比块盒宽

  • 一个块级盒对其包含块来说太宽了。当一个元素的width属性具有一个能让生成盒从包含块的边内溢出的值时,可能会发生这种情况

  • 一个元素的高度超出了为其包含块显式指定的高度(即,包含块的高度由height属性决定,而不是由内容高度)

  • 一个后代盒是绝对定位的,部分内容在该盒外部。这种盒并不一定会根据其祖先的overflow属性裁剪。特殊的,它们不会被介于自身和包含块之间的任意祖先的overflow裁剪

  • 一个后代盒具有负margin,导致它的部分内容被定为在该盒外部

  • text-indent属性让一个行盒挂在该块盒的left或者right边上

出现溢出时,overflow属性指定了一个盒是否应该被裁剪到其padding边内,以及是否需要提供一种滚动机制来访问所有被裁剪掉的内容

Overflow

overflow各种属性值的表现

在本例中,overflow:visible默认,对溢出不作处理;overflow:hidden对溢出部分进行隐藏;overflow:scroll对右边以及下边做出滚动条处理,不管元素是否溢出;overflow:auto对溢出部分做滚动条处理;overflow:inherit应该从父元素继承overflow属性的值

css3新特性

css3中增加了overflow-x以及overflow-y分别代表水平方向和垂直方向的overflow,这两个属性是相同值时,等同于overflow的属性值;这两个值一个非overflow:visible,一个为overflow:visible时,overflow:visible的属性值会变为
overflow:auto

overflow起作用的前提:

  1. display:inline水平

  2. 对应方位的尺寸限制.width/height/max-width/max-height/absolute拉伸

  3. 对于单元格td等,还需要tabletable-layout:fixed状态才行

对于ie7浏览器来说,使用overflow会有一些bug:

  1. 滚动条样式不同(这一条在win10中都一样)

  2. 宽度设定机制,对于子元素设置width:100%,ie7会按照父元素宽度计算,也就是400px,而子元素有垂直滚动条占据一部分空间,所以实际水平宽度不到400px,因此水平滚动条会出现
    解决方法是去掉width:100%





    .box{
    width: 400px;
    height: 100px;
    overflow: auto;
    }
    .content{
    width: 100%;
    height: 200px;
    background-color: #beceeb;
    }

    ie7浏览器下,文字越多,按钮两侧padding留白就越大,这时,给按钮样式添加overflow:visiable就能解决

Overflow与滚动条

滚动条出现的条件

  1. overflow:auto/overflow:scroll,html标签,textarea标签

  2. 子元素超出父元素限制

Body/Html与滚动条

在浏览器中,默认滚动条均来自而不是

原因:新建一个空白html,默认.5em margin,如果滚动条来自,则应该有边距,而不是靠着浏览器边缘

  • IE7-浏览器默认: html{ overflow-y:scroll}

  • IE8+浏览器默认: html{overflow:auto}

所以我们去除页面默认滚动条,只需要:

html{ overflow:hidden}

使用js获取滚动高度

  • Chrome浏览器是:document.body.scrollTop

  • 其他浏览器: document.documentElement.scrollTop

为了兼容性建议使用: var st=document.documentElement.scrollTop||document.body.scrollTop

Overflow的padding-bottom缺失现象

.box{
width: 400px;
height: 100px;
padding: 100px 0;
overflow: auto;
border: 1px solid #000;
}

上面的代码在Chrome浏览器中会出现padding-bottom,而在其它浏览器中都不会出现,这样就导致出现不一样的scrollHeight

滚动条的宽度

准确说法应该是滚动栏的宽度.下面方法可以简单获得:

.box{
width: 400px;
overflow:scroll;
}
.in{
*zoom:1;
}





var a = console.log (400-document.getElementsById("in").clientWidth);

Overflow:auto的潜在布局隐患

滚动条会占用容器尺寸,原本和谐的布局,滚动条出现后可能会错位或者出现水平滚动条,在实现这种布局时一般使用自适应布局或者预留合适宽度

水平居中跳动问题

.container{width:1150px;margin:0 auto}

这种使用水平居中的布局,因为滚动条会占用一部分空间,所以滚动的时候会跳动,向左偏移滚动条宽度

水平居中跳动问题的修复

1.html{overflow-y:scroll}

这个解决方案唯一缺点就是不美观,会出现滚动条

2..container{padding-left:calc(100vw-100%);}
100vw-浏览器宽度; 100%-可用内容宽度;这个解决方案需要IE9+支持

Overflow与BFC

overflow:visible可以触发BFC

  1. 清除浮动影响

  2. 避免margin穿透问题

  3. 两栏自适应布局

1.overflow内部float无影响,IE6是不支持的,所以才有了广为流传的清除浮动方法:

清除浮动方法

3.overflow与两栏自适应布局

使用overflow实现两栏自适应布局

还有一种广为流传的实现两栏自适应布局的方法,使用table-cell

table-cell实现两栏自适应布局

Overflow与absolute

隐藏失效与滚动固定

在上面的例子中,一旦子元素设置为absolute,父元素的overflow属性会失效

绝对定位元素不总是被父级overflow属性裁剪,尤其当overflow在绝对定位元素及其包含块之间的时候

如何避免失效

  • overflow元素自身为包含块

  • overflow元素的子元素为包含块

  • 任意合法transform声明当作包含块

transform声明当作包含块

  • overflow元素自身transform

  • overflow子元素transform

避免失效例子

Overflow妙用

居中及边缘对齐定位

这里面的边缘对齐定位,使用的就是父元素overflow:hidden,子元素的 被隐藏,后面的图片设置position:absolute使overflow对于图片的作用失效,从而实现滚动条上下滚动的边缘定位效果

依赖overflow的样式表现

CSS3有个属性名为resize,可以拉伸元素尺寸:

  • resize:both水平垂直两边拉

  • resize:horizontal只有水平方向拉伸

  • resize:vertical只有垂直方向拉伸

但是,此声明起作用的前提是元素不是overflow:visible

一些依赖overflow的样式表现

例1中,我们给button使用了一个overflow:hidden以及resize:both,button可以水平垂直拉伸
例2是一个textarea,因为它默认overflow:auto,所以它默认就能拉伸
例3是我们给段落一个overflow:hidden以及text-overflow:ellipsis,就会在最后显示…(省略号)

Overflow与锚点技术

锚点与锚链

在这个例子中,通过#mm3(锚链)找到图片的id(锚点)来定位

锚点定位的本质就是:改变容器的滚动高度

需要满足的条件:

  1. 容器可滚动

  2. 锚点元素在容器内

《可视化效果(Visual effects)》

锚点定位的触发

  1. url地址中的锚链与锚点元素

  2. 可focus的锚点元素处于fcous态

锚点定位的作用

  1. 快速定位

  2. 锚点定位与overflow选项卡技术

overflow选项卡

在这个例子中,我们使用了锚点定位技术实现选项卡,并使用overflow:hidden隐藏溢出的选项卡

这种用法有一个不足之处,就是当我们在页面偏下位置时,当你切换选项卡的时候,它会定位到最外层的滚动条,体验很糟糕,所以一般用在单页场景

URL锚点HTML定位技术机制、应用与问题

无Javascript纯CSS实现选项卡轮转切换效果

Clip&&clip-path

Clip

裁剪区域(clipping region)定义了一个元素border box的哪一部分是可见的。默认情况下,元素不会被裁剪。然而,裁剪区域可以通过clip属性显式地设置

clip的剪切例子

使用clip裁剪必须是absolute或者fixed元素,本例中没有逗号分隔的是兼容IE6/7版本

《可视化效果(Visual effects)》

rect(top,right,bottom,left);中的top,bottom是相对于盒子上边框边界的偏移,left,right是相对于盒子左边框边界的偏移

clip属性已经弃用,因为它的适用范围太小,只能用在绝对定位元素下,而且只能用于裁剪矩形,取而代之的是clip-path

Clip-path

clip-path,包括了一条闭合的矢量路径,它可以是CSS中定义的基础形状,也可以是包含了clipPath标签的SVG元素。在闭合路径内的内容会显示,而路径外边的都会被剪掉著作权归作者所有。

clip-path语法:

clip-path: | [ || ] | none

where

=
= | | |
= | fill-box | stroke-box | view-box

where

= inset( {1,4} [ round ]? )
= circle( [ ]? [ at ]? )
= ellipse( [ {2} ]? [ at ]? )
= polygon( ? , [ ]# )
= | margin-box

where

= |
= | closest-side | farthest-side
= [[ left | center | right | top | bottom | ] | [ left | center | right | ] [ top | center | bottom | ] | [ center | [ left | right ] ? ] && [ center | [ top | bottom ] ? ]]
= nonzero | evenodd
= border-box | padding-box | content-box = border-box | padding-box | content-box

上面的语法表示的是:

clip-path语法实例

css-masking-1
clip-path css-tricks
clip-path MDN
Introducing the CSS clip-path Property
打破盒子模式的限制,使用Clip-Path创建响应式图形

Visibility

visibility属性有两种用法:

  1. 取值为hidden时隐藏元素,并将其所占空间用空白占位

  2. 取值为collapse时隐藏表格的一行或一列


推荐阅读
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 基于 Vue 和 Element UI 实现的简洁登录界面设计
    本文介绍了一种利用 Vue.js 和 Element UI 框架构建的简洁登录界面设计。该设计不仅注重用户体验,还确保了界面的美观性和易用性。通过合理的布局和组件配置,实现了高效、响应式的登录功能,适用于多种前端应用场景。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
author-avatar
C_z和
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有