想了解html–CSS左:-50%导致IE7忽略宽度的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于能源经济专业介绍的相关问题,此外,我们还将为您介绍关于cssrelayoutrepaint
想了解html – CSS左:-50%导致IE7忽略宽度的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于能源经济专业介绍的相关问题,此外,我们还将为您介绍关于css relayout repaint导致ios下的bug_html/css_WEB-ITnose、css – @ font-face被IE7忽略、css – Flex-Basis:0%会导致IE11中出现错误的溢出、css – Html div宽度100%不起作用的新知识。
本文目录一览:- html – CSS左:-50%导致IE7忽略宽度(能源经济专业介绍)
- css relayout repaint导致ios下的bug_html/css_WEB-ITnose
- css – @ font-face被IE7忽略
- css – Flex-Basis:0%会导致IE11中出现错误的溢出
- css – Html div宽度100%不起作用
html – CSS左:-50%导致IE7忽略宽度(能源经济专业介绍)
我的网站上有一个水平居中的标签,我的想法是UL / LI项目以页面为中心,我有一个直到最近(看起来)像所有浏览器配置一样的解决方案.
这个html实际上非常简单:
<div id="tabContainer"> <ul> <li><span><a href="#">Tab One with more text</a></span></li> <li><span><a href="#">Tab Two</a></span></li> <li><span><a href="#">Tab Three is wide</a></span></li> </ul> </div>
>每个< li>是一个标签,左边的圆形标签页面左边有填充.
>每个< span>有正确的填充右侧圆形标签的东西.
>最后< a>通常会填充剩下的大量点击目标.
>每个项目都是手动设计的宽度:190px,这使得它们的宽度保持一致(为了获得良好的视觉效果,这是由站点代码自定义的,因此它在样式与类中.
CSS:
> CSS使用一个简单的概念,< ul>向右移动50%,< li>向左移动50%(左:-50%;),使它们始终位于主容器的中心.
>标签重叠一点使用负边距& z-index所以角落十字交叉(在背景图像中完成,这里不重要)
问题
IE7决定它不会听取显式样式=“width:190px”,即使添加了!important.然而,这似乎只在左边时发生:< li>上存在-50%.项目.如果删除该样式,则选项卡会向右移动(错误的位置,但正确的固定宽度).
对我而言,这似乎是无关的,因为左边没有任何东西:-50%会导致物品碰撞,迫使它们达到最小宽度.
此设置正常工作,并在以下测试:
> IE8
> IE9
> FF3.6
> FF5
> Chrome稳定(第13版)*
> Chrome Beta(第14版)*
> Safari 3
*截至2011年7月18日
那么,是什么导致了这个?为什么会这样?我该如何解决?我尝试了各种各样的调整,但是不能让它服从宽度……
图像,以便您可以并排查看问题:
Problem http://img715.imageshack.us/img715/3686/ie7centertabsproblem.png
解决方法
css relayout repaint导致ios下的bug_html/css_WEB-ITnose
问题
近日在做移动端web时发现一个问题就是在ios中如果动画元素使用了left top值时在微信易信客户端中不能使用系统的复制文本功能了。纠结了许久,后来在大神的提醒下,了解到是因为css的repaint导致的。改用了css3的translate以后就ok了, 查了一下资料,发现有以下的一些知识点,现在贴出来,有需要的人可以看看。参考资料:https://github.com/alloyteam/mars/blob/master/performance/css-property-animation-performance.md
缘由
CSS动画属性会触发整个页面的重排relayout、重绘repaint、重组recomposite
Paint通常是其中最花费性能的,尽可能避免使用触发paint的CSS动画属性,这也是为什么我们推荐在CSS动画中使用webkit-transform: translateX(3em)的方案代替使用left: 3em,因为left会额外触发layout与paint,而webkit-transform只触发整个页面composite
div {
-webkit-animation-duration: 5s;
-webkit-animation-name: move;
-webkit-animation-iteration-count: infinite;
-webkit-animation-direction: alternate;
width: 200px;
height: 200px;
margin: 100px;
background-color: #808080;
position: absolute;
}
@-webkit-keyframes move{
from { left: 100px;}to { left: 200px;}
}
如下图使用left将持续触发页面重绘,表现为红色边框:
move
立即学习“前端免费学习笔记(深入)”;
@-webkit-keyframes move{
from { -webkit-transform: translateX(100px);}to { -webkit-transform: translateX(200px);}
}
如下图使用-webkit-transform页面只发生重组,表现为橙色边框:
move2
立即学习“前端免费学习笔记(深入)”;
CSS属性在CSS动画中行为表
立即学习“前端免费学习笔记(深入)”;
浏览器绘制 DOM 的过程是这样子的:
获取 DOM 并将其分割为多个层(layer)将每个层独立地绘制进位图(bitmap)中将层作为纹理(texture)上传至 GPU复合(composite)多个层来生成最终的屏幕图像。
left/top/margin 之类的属性会影响到元素在文档中的布局,当对布局(layout)进行动画时,该元素的布局改变可能会影响到其他元素在文档中的位置,就导致了所有被影响到的元素都要进行重新布局[1],浏览器需要为整个层进行重绘并重新上传到 GPU,造成了极大的性能开销。
transform 属于合成属性(composite property),对合成属性进行 transition/animation 动画将会创建一个合成层(composite layer),这使得被动画元素在一个独立的层中进行动画。通常情况下,浏览器会将一个层的内容先绘制进一个位图中,然后再作为纹理(texture)上传到 GPU,只要该层的内容不发生改变,就没必要进行重绘(repaint),浏览器会通过重新复合(recomposite)来形成一个新的帧[2]。
层创立的条件如下:
3D 或透视变换 CSS 属性使用加速视频解码的 <video> 元素拥有 3D (WebGL) 上下文或加速的 2D 上下文的 <canvas> 元素复合插件(如 Flash)进行 opacity/transform 动画的元素拥有加速 CSS filters 的元素元素有一个包含复合层的后代节点(换句话说,就是一个元素拥有一个子元素,该子元素在自己的层里)元素有一个 z-index 较低且包含一个复合层的兄弟元素(换句话说就是该元素在复合层上面渲染)
总结:
对布局属性进行动画,浏览器需要为每一帧进行重绘并上传到 GPU 中对合成属性进行动画,浏览器会为元素创建一个独立的复合层,当元素内容没有发生改变,该层就不会被重绘,浏览器会通过重新复合来创建动画帧
另外可以参考http://csstriggers.com/ 里面有各种属性对页面布局,重绘,重排的影响关系。
css – @ font-face被IE7忽略
你可以在http://grupogamma.socialsnack.com/看到该网站
@ font-face规则在http://grupogamma.socialsnack.com/wp-content/themes/gamma/style.css上,字体在http://grupogamma.socialsnack.com/fonts/上
由Font Squirrel生成的我的css片段:
@font-face { font-family: 'UniversCondensedLight'; src: url('/fonts/univers-condensedlight-webfont.eot'); src: url('/fonts/univers-condensedlight-webfont.eot?#iefix') format('eot'),url('/fonts/univers-condensedlight-webfont.woff') format('woff'),url('/fonts/univers-condensedlight-webfont.ttf') format('truetype'),url('/fonts/univers-condensedlight-webfont.svg#webfonteM3WTEhs') format('svg'); font-weight: normal; font-style: normal; } @font-face { font-family: 'UniversCondensed'; src: url('/fonts/univers-condensed-webfont.eot'); src: url('/fonts/univers-condensed-webfont.eot?#iefix') format('eot'),url('/fonts/univers-condensed-webfont.woff') format('woff'),url('/fonts/univers-condensed-webfont.ttf') format('truetype'),url('/fonts/univers-condensed-webfont.svg#webfontPDfnu2z9') format('svg'); font-weight: normal; font-style: normal; }
编辑:
通过使用Wireshark,我能够验证字体.eot确实已加载,并返回200 OK. content-type是application / vnd.ms-fontobject.所以加载了字体,但是没有使用/没有正确呈现.
解决方法
值得庆幸的是,使用一些神奇的仙尘(zoom:1)解决了这个问题.
css – Flex-Basis:0%会导致IE11中出现错误的溢出
我有一个可变数量的flex-children,每个孩子的宽度都不明.每个孩子都有任意动态生成的内容.但是,其中一些内容必须能够包装文本.
flex-container本身必须有100%的宽度,并且必须能够包裹它的子节点(即flex-wrap:wrap).
假设有三个flex-children,最后一个需要文本换行:
<div> <div> <div>This text should not overlay other flex-children.</div> </div> <div> <div>This text should not overlay other flex-children.</div> </div> <div> <div>This text should break on new lines when the container shrinks down</div> </div> </div>
CSS可以定义如下:
.flex-container { display: flex; flex-wrap: wrap; width: 100%; } .flex-child { flex-grow: 1; flex-shrink: 0; flex-basis: 0%; white-space: Nowrap; padding: 5px; } .text-break { white-space: pre-wrap; }
当窗口足够宽时,每个flex-child应该是并排的,文本不会折叠:
当窗口水平缩小时,最右边框中的文本应该开始突破到新行:
当文本不再分成更多行时,弹性框本身应该开始断行:
这在大多数现代浏览器中都很有用,但不是我们的朋友IE11.在IE11中,当更改屏幕大小时,文本包装正常,但flex-children根本不包装.因为flex-children不会换行,所以它们的内容会相互溢出:
将flex基础更改为flex-basis:auto;有相反的效果:文本不会包装但flex-children会这样做,但没有内容溢出(在此屏幕截图中,绿色框中的文本应该是断行而不是弹性框分成新行):
我见过的大多数解决方案都需要固定长度的flex-children,因为它们是动态生成的,所以我在这里无法承受.我故意没有使用flex快捷方式属性,因为它有一些其他非相关的问题. This answer建议使用_: – ms-fullscreen,:root .IE11-only-class {/ * IE11特定属性* /},如果我可以绕过文本包装问题可能会有效,但我无法弄明白.
我还应该说,我只需要在最新的浏览器上工作(技术上只适用于某些版本的Chrome和IE11,但其他浏览器和版本也可以使用).
这是一个完全显示问题的code pen(在IE11和Chrome中查看以查看差异).
有没有人对如何解决这个问题有任何想法?
请记住,要求是:
>未知数量的未指定宽度的弹性儿童
>某些文本必须在弹性框包装之前换行
> flex-children必须包装一旦文本不再包装更多
> Chrome(我使用的是59.0.3071.109)和IE11(我使用的是11.0.9600.18816CO)应该以相同的方式运行.
>首选CSS解决方案
谢谢.
更新:
我的同事建议为不包含可包装文本的flex-children使用单独的类.他使用了以下HTML和CSS:
<!--HTML--> <div> <div> <div>This text should not overlay other flex-children.</div> </div> <divhttps://www.jb51.cc/tag/textwrap/" target="_blank">textwrap child-2"> <div>This text should not overlay other flex-children.</div> </div> <divhttps://www.jb51.cc/tag/textwrap/" target="_blank">textwrap child-3"> <div>This text should break on new lines when the container shrinks down</div> </div> </div>
和
/*CSS*/ .flex-container { display: flex; flex-wrap: wrap; } .flex-child { flex-grow: 1; flex-shrink: 1; padding: 5px; white-space: Nowrap; } .flex-child-without-textwrap { flex-basis: auto; } .flex-child-with-textwrap { min-width: 200px; flex-basis: 0%; } .text-break { white-space: pre-wrap; }
他的解决方案在技术上解决了我在这里提出的问题,但我忘了提到另一个要求:
>在flex-child中,可以存在可包装文本和不可包装文本的任意组合
将第三个flex-child更改为:
<divhttps://www.jb51.cc/tag/textwrap/" target="_blank">textwrap child-3"> <div>This text should break on new lines when the container shrinks down</div> <div>This text should not break on new lines</div> </div>
在这种情况下,第三个flex-child中第二个div中的文本流出其容器,文本开始包装得太早.
可以在here看到显示这个几乎正常工作的解决方案的codepen(请注意,min-width被删除,因为它在Chrome上引起了进一步的问题).
更新2:
我不认为我之前已经足够清楚了:任何,所有或者没有一个flex-children可能有可翻译文本.这一切都取决于动态生成的内容.在我给出的示例中,只有第三个flex-child具有可包装的文本,但情况可能并非总是如此.
解决方法
经过大量的反复试验后,我想出了这个设置,我的目标是让IE尽可能地模仿其余的浏览器行为.
IE需要在可破坏的父级上具有最小宽度,因此在元素换行之前文本不会折叠为0宽度,并且因为弹性基础通常需要是自动的,但是在可破坏的父级上是0px,成长需要在5左右.
我使用仅IE11选择器(我在this answer of mine中展示)添加了以下规则.
_:-ms-fullscreen,:root .flex-child { flex-basis: auto; } _:-ms-fullscreen,:root .child-3 { flex: 5 0 0px; min-width: 80px; }
Updated codepen
堆栈代码段
.wrapper { width: 80%; } .flex-container { display: flex; flex-wrap: wrap; width: 100%; } .flex-child { flex: 1 0 0%; white-space: Nowrap; padding: 5px; } _:-ms-fullscreen,:root .child-3 { flex: 5 0 0px; min-width: 80px; } .text-break { white-space: pre-wrap; } /*Add backgrounds for display*/ .child-1 { background-color: pink; } .child-2 { background-color: lightblue; } .child-3 { background-color: lightgreen; }
<div> <div> <div> <div>This text should not overlay other flex-children.</div> </div> <div> <div>This text should not overlay other flex-children.</div> </div> <div> <div>This text should break on new lines when the container shrinks down</div> </div> </div> </div>
css – Html div宽度100%不起作用
第一个标签是id =“header”的div.我给它100%宽度并给它一个背景图像.
在标题内部还有另一个id =“header-contents”的div.我希望它集中在页面上,所以我给它一个宽度然后保证金:0自动.它适用于最大尺寸的浏览器,但是当我放大或缩小浏览器宽度大约一半时,标题div的背景在某个点开始消失并且不会填充100%的宽度.
这是它首先看起来的样子(并且应该总是看起来):
intended look http://i49.tinypic.com/3505fnk.png
这是我缩放或调整浏览器大小时的外观:
after resize http://i46.tinypic.com/2lqg7r.png
什么是适当的HTML和CSS?
这是代码:
<!DOCTYPE HTML> <html> <style> body { margin:0; padding:0; } .clear { display:block; clear:both; } #header { min-height:156px; width:100%; background-image:url('http://www.webdesignideas.org/images/bellevueBg.gif'); } #head-contents { width:974px; margin:0 auto; height:156px; } #header ul { margin:85px 23px 0 0; float:right; list-style-type:none; } #header ul li { display:inline; } #header ul li a { margin-left:46px; font-size:19px; color:#fff; text-decoration:none; } #header ul li a:hover,#header ul li a.active { color:#FD7600 } </style> <body> <div id="header"> <div id="head-contents"> <img src="http://t1.gstatic.com/images?q=tbn:ANd9GcRRlklPBeTiVsV7dycvDxqFyrU02d0grYf4rTUqL-2ZzGb8Qvbwimb37HgO" /> <ul> <li><a href="#">Home</a></li> <li><a href="#">Products</a></li> <li><a href="#">About</a></li> <li><a href="#">Contact</a></li> </ul> <div></div> </div> </div> </body> </html>
解决方法
#header { height: 156px; min-width: 990px; background-image: url('http://www.webdesignideas.org/images/bellevueBg.gif'); display: block; } #head-contents { width: 974px; margin: 0 auto; height: 156px; }
这都是#header中最小宽度的问题.我检查了facebook的登录页面并弄明白了.
今天关于html – CSS左:-50%导致IE7忽略宽度和能源经济专业介绍的介绍到此结束,谢谢您的阅读,有关css relayout repaint导致ios下的bug_html/css_WEB-ITnose、css – @ font-face被IE7忽略、css – Flex-Basis:0%会导致IE11中出现错误的溢出、css – Html div宽度100%不起作用等更多相关知识的信息可以在本站进行查询。
本文标签: