GVKun编程网logo

html – CSS左:-50%导致IE7忽略宽度(能源经济专业介绍)

18

想了解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忽略宽度(能源经济专业介绍)

html – CSS左:-50%导致IE7忽略宽度(能源经济专业介绍)

A fully working example is availiable here on jsFiddle.我强烈建议您查看CSS,因为CSS很大,我不想在这里粘贴(让我的问题很难阅读).

我的网站上有一个水平居中的标签,我的想法是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

解决方法

我建议把style =“min-width:190px; max-width:190px;”而不是style =“width:190px;”.在IE7文档/浏览器模式下,它适用于我.

css relayout repaint导致ios下的bug_html/css_WEB-ITnose

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忽略

css – @ font-face被IE7忽略

我已经使用 Font Squirrel创建了@ font-face css规则和所有字体格式,并且在我到目前为止测试过的所有浏览器上都能正常工作,但在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.所以加载了字体,但是没有使用/没有正确呈现.

解决方法

似乎我的CSS中还有其他东西让IE7表现得很糟糕(震撼!)

值得庆幸的是,使用一些神奇的仙尘(zoom:1)解决了这个问题.

css – Flex-Basis:0%会导致IE11中出现错误的溢出

css – Flex-Basis:0%会导致IE11中出现错误的溢出

我遇到的问题涉及flex-basis:0%;当用户缩小窗口宽度时,IE11如何处理它.可能与 box-sizing的错误有关.

我有一个可变数量的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应该是并排的,文本不会折叠:

Correct display - Max-width Window

当窗口水平缩小时,最右边框中的文本应该开始突破到新行:

Correct Display - Mid-width Window

当文本不再分成更多行时,弹性框本身应该开始断行:

Correct Display - Min-width Window

这在大多数现代浏览器中都很有用,但不是我们的朋友IE11.在IE11中,当更改屏幕大小时,文本包装正常,但flex-children根本不包装.因为flex-children不会换行,所以它们的内容会相互溢出:

Incorrect IE11 Display - flex-basis: 0%

将flex基础更改为flex-basis:auto;有相反的效果:文本不会包装但flex-children会这样做,但没有内容溢出(在此屏幕截图中,绿色框中的文本应该是断行而不是弹性框分成新行):

Incorrect IE11 Display - flex-basis: auto

我见过的大多数解决方案都需要固定长度的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具有可包装的文本,但情况可能并非总是如此.

解决方法

请注意,这个答案是在问题2的更新之前发布的,这使得它部分无效,但我现在暂时离开,有人可能需要它.

经过大量的反复试验后,我想出了这个设置,我的目标是让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%不起作用

css – Html div宽度100%不起作用

我的 HTML存在一些问题,所以我发布了代码.

第一个标签是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%不起作用等更多相关知识的信息可以在本站进行查询。

本文标签: