惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
H
Help Net Security
Last Week in AI
Last Week in AI
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
B
Blog
C
Check Point Blog
T
Tailwind CSS Blog
云风的 BLOG
云风的 BLOG
D
Docker
Recent Announcements
Recent Announcements
Vercel News
Vercel News
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
月光博客
月光博客
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
The Register - Security
The Register - Security
V
Visual Studio Blog
F
Full Disclosure
Hugging Face - Blog
Hugging Face - Blog
T
Threat Research - Cisco Blogs
Latest news
Latest news
PCI Perspectives
PCI Perspectives
Cisco Talos Blog
Cisco Talos Blog
博客园 - Franky
D
DataBreaches.Net
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
P
Palo Alto Networks Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
T
Tenable Blog
L
LINUX DO - 热门话题
Spread Privacy
Spread Privacy

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
了不起的IE7浏览器-CSS新特性-实现与思维变革 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2015-07-30 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from http://www.zhangxinxu.com
本文地址:http://www.zhangxinxu.com/wordpress/?p=4876

一、不仅仅是IE7浏览器

本文所展示的一系列特性,以及一些思维方式的转变不仅适用于IE7浏览器,如果你的项目只需要兼容IE9+,或者你直接捣鼓移动端,其实都是适用的。

静心阅读,说不定会发现一些以前没注意的点。

虽然说,整个大中国,IE7份额远不如IE6浏览器,但是,我所从事的几个项目,IE6的占有率相当小,IE7却有6%多。

因此,IE7浏览器还是需要考量的。

以前在我还需要兼容IE6浏览器的时候,我总觉得IE6和IE7浏览器是一个路子的一个货色,很多bug和行为表现是一致的。认为,要兼容IE7和兼容IE7基本上没多大差别。后来深入实践发现,之前的想法有些天真了。实际上,IE7浏览器下,我们也能实现很多好玩且有价值的东西。

二、IE7新支持选择器以及作用

1. 多类选择器
所谓多类选择器指的是类似.classA.classB这种多个类名写在一起的选择器,实际上,IE6浏览器也是支持的,但是呢?有bug. .a.c.b.c貌似会冲突(年代久远,75%的确信),好像是要写成.c.a.c.b.

IE7浏览器大家可以放心大胆地使用,没有任何bug存在。但是呢,根据数年前我在Chrome浏览器下的测试和分析,多类选择器是CSS选择器中性能相当低下的选择器,好像没有之一。但是呢,CSS选择器本身就很快,对吧,1~2毫秒的差异其实大家也不必在意。毕竟,没人会整个CSS文件全部都是多类选择器,那就太傻了!

IE7支持多类选择器,使得我们在CSS构建的时候,可以放心大胆使用状态类名对整个项目进行控制。

所谓状态类名,有些对应于HTML控件中的一些属性,例如:.disabled, .checked, .active, .selected. 对的,这些特性整站通用,有些人可能会疑问,到处使用,不怕冲突吗?

不怕,这些状态类名,除了通用特性,其余处于一种辅助UI的角色,需要与特定场景相关联,并不会独立使用。

例如,我们项目中有两种按钮,一种是红色,一种是绿色。类名分别是:.button_red, .button_green. 在IE6年代,要实现这两种按钮的禁用态,一般是两个新的独立的类名:.button_red_disabled, .button_green_disabled. 对于按钮本身而言,貌似没什么问题,但是从整个项目来看,有失体系。

现在,IE7支持多类选择器,我们就可以使用整站通用的.disabled状态类名,红色和绿色按钮的禁用态书写,直接就是:.button_red.disabled {}.button_green.disabled {}. 然后其他什么禁用,我们就是.xxx.disabled等。

2. 相邻父子选择器
所谓相邻父子选择器指的是类似 .classA > .classB这种写法的选择器,只会控制下一层级的元素。IE6浏览器支持的选择器是“后代选择器”,也就是类似.classA .classB,两个选择器之间直接是空格,然而,这种选择器在面对复杂场景的时候,容易样式冲突,不好控制。

例如,连续的ul,li嵌套,单纯使用ul li选择器非常容易出问题,因为ul下面所有的li标签都受影响了,而实际上,我们只想控制本ul下面的li元素。在IE7+浏览器下面,就没有这样的担忧,使用ul > li选择器则完全没有这样的问题。

除了有效降低冲突,提高选择的精确度,我们还可以使用相邻父子选择器实现一些巧妙的功能。举个例子:我也页面上实现藏了几个弹框要加载的DOM元素,默认是要隐藏的,然后,加载到弹框的之前,需要是显示的。怎么搞?

我以前的做法是弹框要加载的时候,使用JS让DOM元素显示。后来鄙人发现,不需要动用JS. 由于默认的DOM元素直接放在<body>下,而弹框装载后到了弹框里面,于是,我使用了一个小小的父子选择器就搞定了整个儿显示问题。

body > .dom { display: none; }

元素一旦载入弹框,就会自动显示,因为,它已经不是<body>下相邻的子元素了。

3. 相邻兄弟选择器
相邻兄弟选择器指的是类似 .classA + .classB这种写法的选择器,表示紧跟在我后面的兄弟选择器,注意必须是紧跟着的兄弟,其他远一点的,或者前面的兄弟都不行。

别小看这个选择器,我们可以让IE7浏览器也绽放夺目的光彩。

先举个简单实用的小例子。我们使用弹框的时候,右下角或左下角或者中间都有两个按钮,按钮之间有一定的距离,假设20像素:

弹框按钮截图

有没有什么方法实现单纯的20像素间距,而没有其他多余的margin呢?

传统思路可能是这样:

.button { margin-left: 20px; }
.button:first-child { margin-left: 0; }

中文释义就是,左边20像素间距,其中,第一个按钮左间距为0. 鼓掌。其实不失为一个好方法。如果我们转换下思路,实现起来可能就更加简单了:

.button + .button { margin-left: 20px; }

天然第一个按钮不会有margin-left间距值。

再举个大点的也更实用的例子,大家可能听过CSS3单复选框技术. 在IE9+浏览器下,我们可以使用单选框和复选框的一些特性,实现展开收起,选项卡,开关效果等。

实际上,我们IE7浏览器也能近似实现这样的效果。IE7、IE8虽然不支持原生的CSS3选择器:checked, 但是,属性选择器还是基本支持的,加上同样支持各类兄弟选择器,于是,IE7浏览器也能渐进使用这类CSS3新技术。

:checked + .xxx { /* IE9+选中效果 */ }
[checked] + .xxx { /* IE8选中效果 */ }
[defaultChecked] + .xxx { /* IE7选中效果 */ }

4. 兄弟选择器
兄弟选择器指的是类似 .classA ~ .classB这种写法的选择器,使用的是弯弯符号,表示A元素后面的所有兄弟元素。对,只能是后面的元素。严格来说,这是个CSS3选择器,但是IE7浏览器支持之,且我使用下来还没遇到过什么诡异问题。

IE7+浏览器下,由于相邻兄弟选择器和兄弟选择器的存在,我们在JS构建一些DOM元素来实现一些UI组件效果的时候,我们的处理方法可能就会发生一些变化。举个例子,placeholder占位符效果。从实现上讲,input元素前插入构建的含placeholder值的元素是最简单也更容易定位的;但是,实际实现的时候,确实要遵循后置原则, 也就是创建的元素要在目标元素的后面。

为什么呢?

原因很简单,在CSS中,我们没有前兄弟选择器,只有后兄弟选择器。于是,我们只能根据前面兄弟控制后面。

还是上面placeholder例子,由于我们是后置实现,于是,我们就能轻松通过CSS实现focus时候,placeholder文字透明度降低到40%的效果:

input:focus + .xxx { filter: alpha(opacity=40); }

但是,要是你前置,或者包裹,都是不行滴!

5. 属性选择器
包括CSS 2.1水平的属性选择器[attr], [attr="val"], [attr~="val"], [attr|="bar"]以及CSS3水平的属性选择器[foo^="bar"], [foo$="bar"], [foo*="bar"].

没错,所有这些属性选择器IE7浏览器都是支持的,虽然某些细节上有些小bug, 但是,基本的属性全部都是支持的。

于是,我们就可以使用属性选择器,隐藏项目中所有的单复选框以及submit按钮,而使用UI更好的自定义<label>控件元素替换显示。

input[type='radio'],
input[type='checkbox'],
input[type='submit'] {
    position: absolute;
    clip: rect(0 0 0 0);
}

好了,老一代的前端由于IE6不支持属性选择器,可能不太认识;新一代的移动端的前端可能只知道CSS3属性选择器,这里有必要简单科普下,尤其[attr~="val"], [attr|="bar"]这两厮。

[attr~=”val”]
这个表示,属性值中间,有匹配val的单词,注意这里的名词——“单词”。CSS3中有一个[foo*="bar"],表示,属性值中间,有匹配的字符内容,这里这里的名词——“字符”。大家都知道,CSS选择器这东西是老外弄出来的,老外的的母语是English, English的句子都是一个单词+空格+一个单词实现的。这这里的[attr~="val"]就是用来匹配这些单词的。因此:

表情出卖了一切。笑脸是支持,能识别,抓狂是不能识别。而[attr*="val"]上面4个都是支持的,因为,每个attr属性值都有val字符。

[attr|=”bar”]
这个表示,属性值开头必须是bar的单词,或者开头是bar-。CSS3中有一个[foo^="bar"],表示属性值以bar字符开头即可。类似上面的单词和字符的区别,因此有:

同样的,如果是使用[foo^="bar"] CSS3选择器,则上面4个都是支持的,因为,每个attr属性值开头都是bar字符。

其他属性选择器,通俗易懂,我就不详细说明了。

6. first-child伪类选择器
IE7浏览器还支持:first-child伪类,可以选择第一个子元素。

但是呢,与之对应的:last-child伪类却不支持,别说IE7浏览器了,IE8浏览器也不支持:last-child伪类,一直到IE9浏览器才支持。

这个伪类能做的事情可多了,各种列表啊,或者细节带图标的按钮啊,等等,对吧,绝对可以释放更多的页面构建的创造力。

三、新支持的CSS声明或特性

1. position:fixed固定定位
IE6浏览器只支持absolute定位,IE7——开始支持fixed定位,也就是浏览器观点,元素位置不变,纹丝不动,不被滚走。

position:fixed除了基本的定位功能,还能实现纯CSS控制的全屏遮罩效果,以前的JS动态计算就不用了等等,一些珍藏秘籍,以后有机会再分享。

2. min/max-width/height最大/小宽度高度
可以实现特定宽度区间内的自适应布局。例如:1024像素到1280像素,就可以使用min/max-width/height控制,不需要JS参与,兼容IE7+浏览器。

min/max-width/height本质上也属于响应式CSS属性。其作用还是很强的,使用频率也是相当之高,以前棘手的特定范围内的图片尺寸控制也有了新思路。

3. absolute拉伸
absolute元素,如果没有明显的尺寸限制说,当left/righttop/bottom对立方向的属性值同时存在的时候,元素的尺寸会被拉伸,同时,该拉伸的元素内部支持百分比高度,于是我们就能四线高度自适应效果实现。

并再次基础上衍生出内滚动布局等等。

4. png alpha透明
以前IE6浏览器只支持索引透明,IE7浏览器下面,不仅索引透明支持,Alpha通道透明也支持。于是乎,我们的布局更自由,图片资源利用率更好了,因为PNG图片适用于各种场景各种背景,从此告别传统年代图标的毛刺的效果图。

5. border-color:transparent透明
以前IE6浏览器,边框颜色设为transparent实际上显示的是黑色,但是IE7浏览器支持边框透明色,使用border模拟图形的时候,就少了很多阻碍。

四、JS部分

Ajax请求可以使用XMLHttpRequest了。

等。

五、结语部分

总之,最近做的些不用管IE6,需要兼容IE7的项目,让我发现了很多好玩地东西,页面重构的创造力也比IE6时代要高很多很多。

CSS/HTML技术有时候就是那么回事,看上去挺简单的,但是一旦深入下去,加上自己的创造力和新思维,会发现,尼玛原来做的事情可以有这么多!

好了,已经开始打瞌睡了。已经没有以前结尾可以洋洋洒洒吐槽一大波文字的精气神了。

姿势有限,如果大家发现有错误之处,欢迎纠正,不甚感谢!也欢迎诸位补充可能遗漏的一些IE7的闪光点。

感谢阅读!

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:http://www.zhangxinxu.com/wordpress/?p=4876

(本篇完)