- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我在桌面和移动设备上使用 Safari 时遇到问题,它在用户滚动时重新绘制 position:fixed 元素的速度非常慢。
safari 难以处理的具有 position:fixed 的元素是 #intro 和 .portfolio-item .expanded-content 的页脚元素。滚动上的#intro 不一定要重新绘制到正确的 z-index(它应该在用户滚动时位于其他元素后面)。移动设备上的页脚元素不会停留在 iOS Safari 滚动内容上方的固定位置。在 iOS safari 上滚动时出现锯齿状(然而,iOS chrome 是流畅的,一切都按预期工作)。
我做了一个 fiddle ,去掉了所有的图像、字体和 JS,你瞧,safari 可以毫无问题地重新绘制位置:滚动上的固定元素。
因为这是一个作品集网站,所以剥离我的图片显然不是一种选择。我真的希望把它变成一个真正的单页网站,而不是使用 AJAX 或任何东西来按需加载内容。我是否对 safari 要求太多,以至于无法拥有那么多元素并能够使用 position:fixed on scroll 重新绘制元素? Chrome 和 FF 似乎没有问题; IE9、10、11 也没有。
我不完全确定这是重绘问题,但您可以在下面的视频中看到,如果我通过触发非滚动事件(如鼠标悬停事件)强制 Safari 重绘,它会重绘并放置在该位置:fixed 我在样式表中指定的 z-index 中的元素。因此,结合 fiddle 工作得很好,这就是为什么我假设这是一个重绘问题,而不是我的代码的问题。
我希望找到一种方法来解决这个问题,而无需诉诸更多的 JS 或动态加载的内容,以保持相同的设计(不要仅仅因为一个浏览器是有问题)并尝试保持快速和流畅的性能。我考虑过每次用户滚动时使用 JS 来强制 safari 重新绘制,但在我看来这会对所有浏览器的性能产生负面影响。我真的可以利用其他人的想法和观点。
fiddle :http://jsfiddle.net/sjc8611/n9z3W/
视频:https://dl.dropboxusercontent.com/u/24724104/position-fixed-repaint-lag-safari.mov
html:
<nav data-scroll-header="" id="main-navigation">
<ul>
<li><a href="#work" data-scroll="">Work</a>
</li>
<li><a href="#about" data-scroll="">About</a>
</li>
<li><a href="#services" data-scroll="">Services</a>
</li>
<li><a href="#contact" data-scroll="">Contact</a>
</li>
</ul>
</nav>
<div class="header" id="header">Header Content</div>
<section id="intro" class="container">
<article class="content">
<h1>Introduction Text</h1>
<p>Welcome to my super cool portfolio site. Check out how awesome I am. You should totally hire me.</p>
</article>
</section>
<section id="work" class="container">
<article class="content">
<h1>Work</h1>
<nav id="portfolio-navigation">
<ul>
<li><a href="#work1">See My Work 1</a>
</li>
<li><a href="#work2">See My Work 2</a>
</li>
</ul>
</nav>
</article>
<article id="work1" class="portfolio-item">
<div class="expanded-content">
<h2 class="center">Here is some of my work!</h2>
<p>Lorem ipsum dolor sit amet..</p>
<footer><a href="#work">Close</a>
</footer>
</div>
</article>
<article id="work2" class="portfolio-item">
<div class="expanded-content">
<h2 class="center">More of my cool work!</h2>
<h1>Proin Quis Tortor Orci. Etiam At Risus</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit..</p>
<footer><a href="#work">Close</a>
</footer>
</div>
</article>
</section>
<section id="contact" class="container">
<article class="content">
<h1>Contact</h1>
<ul id="contact-list">
<li>I would include a list of ways to contact me here</li>
<li>Emails</li>
<li>Telephones</li>
<li>The postal services</li>
</ul>
</article>
</section>
<section id="services" class="container">
<article class="content">
<h1>Services</h1>
<p>Lorem ipsum dolor sit amet..</p>
</article>
</section>
CSS:
body {
background: #fff8ec;
margin: 0 auto;
height: 100%;
}
html {
font-family: Arial, sans-serif;
font-size: 14px;
line-height: 135%;
color: #4b3d2f;
height: 100%;
}
h1, h2, h3, h4, h5 {
font-family: Arial, sans-serif;
}
h1 {
color: #aba499;
text-align: center;
font-size: 2em;
}
.portfolio-item h2 {
font-size: 1.8em;
}
a, a:link, a:visited {
color: #c85128;
text-decoration: none;
}
a:hover {
color: #4b3d2f;
}
p {
margin: 1em 0;
line-height: 135%;
}
img {
max-width: 100%;
height: auto;
}
.container {
width: 100%;
position: relative;
background-color: #e5e2de;
padding: 100px 0;
}
.container > .content {
width: 80%;
margin: 0 auto;
max-width: 800px;
background-color: transparent;
}
#header {
background-color: #c85128;
height: 95%;
position: relative;
z-index: 3;
display: table;
width: 100%;
}
#intro {
background-color: transparent;
position: fixed;
top: 5%;
left: 0px;
height: 25%;
padding: 5% 0;
z-index: 0;
}
#intro > .content {
background-color: #fff8ec;
width: 70%;
padding: 5%;
border-radius: 20px;
box-shadow: 0px 1px 3px #e5e2de;
}
#work {
margin-top: 55%;
background-color: #dedad5;
}
#contact {
background-color: #d8d3cd;
}
#services {
background-color: #d1cbc4;
}
#about {
background-color: #cac4bc;
}
section h1 {
padding: 50px 0;
}
article .expanded-content h2, article .expanded-content p {
margin: 50px auto;
}
#main-navigation {
display: table;
width: 100%;
background-color: #aba499;
position: fixed;
top: 0;
left: 0;
height: 3em;
overflow: visible;
z-index: 2;
}
#main-navigation a {
color: #fff8ec;
font-family:'NovecentowideBookRegular', 'Helvetica Neue', Helvetica, Arial, sans-serif;
display: block;
}
#main-navigation a:hover {
color: #4b3d2f;
text-shadow: 0em -0.05em 0em #e5e2de;
}
#main-navigation ul {
display: table-row;
height: 3em;
overflow: visible;
}
#main-navigation ul li {
display: table-cell;
width: 20%;
padding: .8em;
text-align: center;
vertical-align: middle;
}
.portfolio-item {
max-height: 0px;
height: 0px;
overflow: hidden;
position: fixed;
top: 3em;
left: 0%;
-webkit-transition: height 700ms ease;
-moz-transition: height 700ms ease;
-ms-transition: height 700ms ease;
-o-transition: height 700ms ease;
transition: height 700ms ease;
}
#work1:target, #work2:target {
max-height: 1000px;
opacity: 1;
width: 80%;
height: 70%;
padding: 5%;
top: 5%;
left: 5%;
background-color: #fff;
box-shadow: 0px 0px 100px rgba(0, 0, 0, 0.5);
z-index: 10;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
#work1:target .expanded-content, #work2:target .expanded-content {
max-width: 900px;
margin: 0 auto;
}
#work1:target .expanded-content footer, #work2:target .expanded-content footer {
display: block;
width: 90%;
text-align: right;
background-color: #c85128;
position: fixed;
top: 5%;
left: 5%;
z-index: 11;
}
#work1:target .expanded-content footer a, #work2:target .expanded-content footer a {
display: block;
padding: 1em;
color: #e5e2de;
height: 1em;
}
最佳答案
你没疯。 position: fixed
元素也没有重新绘制,我遇到了问题。还没有找到解决方案。
编辑 找到解决方案。您可以通过在其上触发 CSS 动画来改变它的大小来重绘几乎任何东西。这是我正在使用的片段:
.foo
position: fixed
&.active
animation: repaint 1ms
@keyframes repaint
from
width: 99.999%
to
width: 100%
关于html - 如何强制 Safari 重新绘制位置 :fixed elements on scroll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842992/
下面两个CSS选择器有什么区别? 来自解释here ,它们听起来一样吗? div p{} 选择div元素内的所有p元素 div > p{} 选择父级为 div 元素的所有 p 元素。 最佳答案 区别在
我需要怎么做: 目前,事实证明: 我更喜欢它看起来像: 最佳答案 有了这些空行,看起来您的 select 语句是(正确地)选择您
用替换元素是否有效至 .在这种情况下,我想要, 这样我就可以在...中附加验证数据。这也可以从 中实现吗?或 等等? 最佳答案 标签没有 而且不需要一个。同样适用于 和 .您可以将验证数据作为
我刚刚发现了 Angular 1.2.1 的一个奇怪问题,在 this fiddle 中进行了演示。 (在 IE、FF 和 Chrome 中测试):如果我创建一个非常简单的模板化指令,它无法像 那样
我正在尝试使用 Jsoup 迭代 java 中的两个元素,但是,我收到运行时异常错误。看来我无法将nodes.Element 的类型转换为element.Element。 非常感谢您的帮助,谢谢。 代
假设我的文档中有一组元素,它们是单个对象的子元素。这些元素中的每一个都使用不同的参数注册一个新的事件监听器。如果我丢弃父对象,是否需要手动取消注册所有 eventListener?或者浏览器是否跟踪所
我不应该在我的应用程序中使用 jQuery,但我有一个场景,我需要元素的偏移量,而不是使用 $(element).offset() 我已经使用了 angular.element(element).of
我是TS的新手,我想知道为什么我在以下代码中遇到类型错误(简化):。错误在`{iconMap[名称]}中:。“元素隐式具有‘any’类型,因为‘字符串’类型的表达式不能用于索引类型‘{Categori
我是TS的新手,我想知道为什么我在以下代码中遇到类型错误(简化):。错误在`{iconMap[名称]}中:。“元素隐式具有”any“类型,因为”string“类型的表达式不能用于索引类型”{ Cate
什么意思: Separator.Iterator.Element == Self.Iterator.Element.Iterator.Element 在this (Swift 标准库)swift 实例
是否可以在 img 元素上使用前后伪选择器?认为它是但没有任何运气,将 css 切换到 div 并且它工作正常。 .page-overhang 类是 img 元素。 // page overhang
我在 UI 中的按钮 Click 事件上有以下代码,它返回一个 MS-Excel 文件。它在第一次点击事件中完美运行,但之后返回以下错误。 任何建议,我怎样才能摆脱它? ERROR: Uncaught
如何在 CSS 中编写这个想法: 选择 ElementA 内但不在 ElementB 内且 ElementB 在 ElementA 内的每个元素。 这是一个例子:
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
如果我在 C# 中的 XElement myXML 变量中有以下 XML, myvalue 要获得“myvalue”,我需要执行以下操作: myXML.Element(
我找不到用户名和密码字段。我检查元素,并尝试通过 id、xpath 或 css 选择器查找它,但它给出错误 NoSuchElementException: Message: no such eleme
我的任务是在用户点击它时从输入框中删除占位符并使标签可见。如果用户未在其中再次填写任何内容,请放回占位符并使标签不可见。 我可以隐藏它但不能重新分配它。我试过 element.setAttribute
我正在编写一个 c# 类来编写一个 XML 文件,该文件需要与我们使用的现有 XML 的结构完全匹配,这样一些遗留系统就不会混淆。 当一个元素的InnerText值为null时,我需要xml元素的元素
自定义元素的一个常见做法,至少在 Polymer(最流行的 Web 组件框架)中,是定义一个新的自定义元素。恕我直言,这对 来说不是一个好习惯呈现 元素,因为该元素无法逐步呈现,必须等到它被加载(注册
我正在尝试跟踪元素的可见性及其显示的控制台错误:“元素“a[data-vars-ei]”必须是 AMP 元素”。 但是在点击跟踪的情况下,类似的事情工作正常。 我无法理解为什么会发生这种情况以及我应该
我是一名优秀的程序员,十分优秀!