- 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"
有没有人知道如何用 td 上的 :before/:after 高度修复(明显的)IE 渲染错误?
从外观上看,IE 似乎只认为 :before/:after 伪元素与父元素的 <TD>
一样高。里面的内容。如果<TD>
#1 是 x2 行高 w 内容和 <TD>
#2 只有 x1 行内容,IE 只会渲染 <TD>
的 :before/:after 高度#2 与 x1 行的内容一样高。
我在这里创建了一个 fiddle 示例来更好地说明我的问题:http://jsfiddle.net/231gnfpz/注意:我在 :before/:after 中添加了红色背景,以更好地帮助在 IE 中可视化我的问题
在我的示例中,我有一个中间 <TD>
我应用了 :before/:after 来尝试在特定列的外部创建一个框阴影。这是一个旧元素,所以我无权重写整个表格,FireFox/Chrome 似乎对此没有问题,IE8-11 似乎与我的 :before/:after having a height:100% 有同样的问题.
代码:
table {
background: grey;
width: 100%;
}
table td {
text-align: center;
vertical-align: top;
background: white;
padding: 4px;
width: 33.33%;
position: relative;
}
.testTD:before {
box-shadow: -15px 0 15px -15px grey inset;
content: " ";
height: 100%;
left: -15px;
position: absolute;
top: 0;
width: 15px;
background: Red;
}
.testTD:after {
z-index: 1;
box-shadow: 15px 0 15px -15px grey inset;
content: " ";
height: 100%;
right: -15px;
position: absolute;
top: 0;
width: 15px;
background: Red;
}
<table cellspacing="1" cellpadding "0" border="0">
<tr>
<td>test1</td>
<td class="testTD">test1</td>
<td>test1</td>
</tr>
<tr>
<td>test2
<br/>test2
</td>
<td class="testTD">test2</td>
<td>test2</td>
</tr>
<tr>
<td>test3
<br/>test3
<br/>test3
</td>
<td class="testTD">test3</td>
<td>test3</td>
</tr>
</table>
最佳答案
已解决: 此问题已在 Windows 10 上当前的 Internet Explorer 预览版中得到解决。您现在可以通过 http://remote.modern.ie 从 Windows 或 Mac OS X 测试此问题.如果您需要 IE 11(及更低版本)的支持,上述解决方案应该仍能满足您的需求。
一般来说,表格单元格的尺寸主要由其内容决定。在这种情况下,我们可以看到伪元素导致与共享单元格容器内的相邻内容一样高。这就是 Internet Explorer 对 100%
的理解。
您的伪元素是绝对定位的,并受相对定位的表格单元格的约束。按理说,我们希望伪元素与约束元素一样高,而不是其相邻内容的高度。 Internet Explorer 在这里似乎判断失误。
如果您希望在所有浏览器中使用相同的演示文稿,我建议进行以下更改:
offsetHeight
所以你的标记看起来像这样:
<td class="testTD">
<span class="bar"></span>
<!-- content -->
<span class="bar"></span>
</td>
然后您可以像处理原始伪元素一样相应地设置它们的样式:
.testTD .bar:first-child,
.testTD .bar:last-child {
display: block;
background: #F00;
width: 15px; height: 100%;
position: absolute; top: 0; z-index: 1;
box-shadow: -15px 0 15px -15px grey inset;
}
.testTD .bar:first-child {
left: -15px;
}
.testTD .bar:last-child {
right: -15px;
}
在 Chrome 和 Firefox 中你已经设置好了。你不需要做任何进一步的事情。但是,在 Internet Explorer 中,您需要手动设置这些元素的高度。出于这个原因,我们将在 document
对象上存在 documentMode
属性的情况下设置以下脚本:
(function () {
"use strict";
if ( document.documentMode && document.documentMode < 12 ) {
var spans = document.querySelectorAll( "span.bar" ),
count = spans.length;
while ( count-- ) {
spans[count].style.height = spans[count].parentElement.offsetHeight + "px";
}
}
}());
end-result应该在所有主要浏览器中保持一致。
我将基于互操作性的理由在内部提交一个错误。如果 Chrome 和 Firefox 以一种方式运行,而 Internet Explorer 以另一种方式运行,我们的团队应该考虑造成这种情况的原因。我会将这个问题添加到我打开的工单中,并确保在必要时更新这个答案。
在评论讨论后更新
评论中指出,在这种特殊情况下无法更改原始标记。脚本被正确地确定为此处可能的解决方案。
(function () {
"use strict";
// Get target cells, and create clone-able span element
var tds = document.querySelectorAll( ".testTD" ),
span = document.createElement( "span" );
span.className = "bar";
// Cycle over every matched <td>
for ( var i = 0; i < tds.length; i++ ) {
// Create references to current <td>, and a(fter)/b(efore) clones
var t = tds[i], a = span.cloneNode(), b = span.cloneNode();
// Insert cloned elements before/after <td> content
t.appendChild( a );
t.insertBefore( b, t.firstChild );
// If the user is in Internet Explorer, avoid table-cell height bug
if ( document.documentMode && document.documentMode < 12 ) {
a.style.height = b.style.height = t.getBoundingClientRect().height + "px";
}
}
}());
如果您使用的是 jQuery,则可以更简洁地编写:
(function () {
"use strict";
// Create our clone-able element
var span = $("<span></span>").addClass("bar");
// Add cloned <span> elements at beginning/end of all .testTD cells
$(".testTD").prepend( span.clone() ).append( span.clone() );
// If the user is in Internet Explorer, avoid table-cell height bug
if ( document.documentMode && document.documentMode < 12 ) {
$(".testTD .bar").height(function () {
return $(this).parent().outerHeight();
});
}
}());
关于css - 即 :before/:after 100% height issues on td,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27911771/
这个问题在这里已经有了答案: How can I vertically align elements in a div? (28 个答案) Vertical Aligned Text and Im
我想做一个像 view0.height = view1.height + view2.height 这样的约束。当 view1.height 或 view2.height 改变时,view0.heig
有人可以解释为什么这个标记: 呈现大约 2x18 的 float div(在 Chrome/Firefox 中)而不是 2x2 div? 即使所有空格都被删除,图像似乎也遵循 font-
我的 HTML 页面上有一些可拉伸(stretch)的元素。 使用这个 CSS .stretchable-element { height: 25%; } 随着浏览器窗口高度的增加,可伸缩元素
我在“developer.android.com”上查看以缩小我的位图文件,但我发现了一件事我不明白。所以我很感激你能给我一点帮助。 这是一个 snippet来自 developer.android.
假设我们有以下设置: .container { background-color: red; width: 500px; min-height: 300px; } .child { b
我遇到了高度错误的问题 $(window).height(); 也有类似的问题 here 就我而言,当我尝试时 $(document).height(); 它似乎返回了正确的结果 窗口高度返回320
我正在尝试使用 javaFX (2.2) 开发桌面应用程序,但我遇到了一些困难,无法真正让它按照我希望的方式运行。作为该框架的新用户,我可能没有按应有的方式使用它... 我想要的是一种仪表板,在 Sc
就这么简单:) 我右边的列动态变化,由于左列的高度设置为 100%,我认为根据 Right_Column 的高度动态修改容器的高度会很好。有小费吗?谢谢:) 最佳答案 如果我正确理解了问题,你可以做这
我有一个 ScrollView(包含 NSTextEditor),其顶部、左侧和右侧约束相对于其容器(主窗口)正确设置为 0。 我无法使其高度为主容器的一半。有什么帮助吗? 最佳答案 如果我理解正确,
这个问题之前曾被问过(Infinite Scroll on Mobile browsers),但没有得到回应。 我正在尝试实现无限滚动。 检查文档是否在底部,导致更多加载的函数是: if ($(win
这个问题在这里已经有了答案: height:100% VS min-height:100% (4 个答案) 关闭 6 年前。
我在尝试解决这个问题时遇到了一些问题。我已经编写了一个 jquery 函数来检测用户何时点击页面底部并触发一个函数。现在,虽然这适用于最常见的屏幕尺寸,但当用户的屏幕太大以至于可以一次看到整个页面时,
如何获得与导航高度(填充)相同的导航高度 ...!? nav { width: 100%; } nav ul { text-align: center; background-
所以,实际上我可能完全想多了,应该放弃最小高度,但我目前有以下 HTML:
我正在阅读 Bootsrap3 文档。我发现这段页脚代码粘在屏幕底部。 html, body { height: 100%; } #wrap { min-height: 100%; height: a
我对容器 div 的高度有疑问。我想 它是 body 的 100%,但不起作用。我添加了 css body height=100% var d = document; $(d).ready(funct
我有一个三部分布局:页眉、内容和页脚。我非常熟悉绝对定位技术;当我希望内容 div 扩展到可用高度的 100% 时,我经常使用它。 在这种情况下,我的问题是我事先不知道页脚的高度,它是根据自己的内容动
在下面的代码中,我尝试实现无限滚动。我遇到的问题是“document.height”和“window.height”返回相同的值。有人可以帮我解决我哪里出错了吗?
我有一个页面布局,其中两个 div 在一行中彼此相邻对齐。一列包含可变长度的文本,第二列包含图像。 标记基本上如下: texttext 我的
我是一名优秀的程序员,十分优秀!