Chrome/Webkit内联块刷新问题

发布于 2024-12-02 18:25:56 字数 695 浏览 1 评论 0原文

我发现的问题如下:

情况:我的整体 div 具有 inline-block 显示。其中有两个元素也具有 inline-block 显示。

然后我在两个元素之间添加(感谢 JavaScript)
。第二个转到下一行,这是正常行为。

错误部分:然后删除
(再次使用JavaScript)并且...显示不会改变。看来整体div的box没有重新计算。最后,我有两个相似的标记,但它们的显示方式不同(这有点问题,不是吗)。

它在 Firefox 上运行良好(它似乎是基于 webkit 的,因为 Android 浏览器的行为方式相同)。所以我的问题是,是否有一种不使用会改变 DOM 的方法的解决方法?使用的库是 jQuery。

测试用例此处

编辑:按照duri的建议,我在webkit bugzilla中填写了一份错误报告,它是这里。但我仍在寻找解决方法 ;)

The problem I found is the following:

Situation: I have overall div that has a inline-block display. Inside it are two element that have an inline-block display as well.

Then I add (thanks to JavaScript) a <br/> between the two elements. The second goes to the next line, which is the normal behavior.

Buggy part: The <br/> is then removed (JavaScript again) and... the display doesn't change. It appears that the box of the overall div is not recalculated. In the end I have two similar markup that doesn't appear the same way (which is a bit problematic, isn't it).

It works fine on Firefox (it appears to be webkit based as the Android browser behave the same way). So my question is, is there a workaround that doesn't use methods that will alter the DOM? The library used is jQuery.

A test case here.

EDIT: As suggested by duri, I filled a bug report in webkit bugzilla, it's here. But I'm still looking for a workaround ;)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

So尛奶瓶 2024-12-09 18:25:56

我发现的方式:从整个 DIV 中删除所有子项,然后附加除 BR 之外的所有子项:

function removeBr(){
    var ahah=document.getElementById("ahah");
    var childs=[],child;
    while(child=ahah.firstChild) {
        if(!child.tagName||child.tagName.toLowerCase()!=='br')
            childs.push(child);
        ahah.removeChild(child);
    }
    for(var i=0;i<childs.length;i++)
        ahah.appendChild(childs[i]);
}

http://jsfiddle.net /4yj7U/4/

其他变体:

function removeBr(){
    var node=$("#ahah")[0];
    node.style.display='inline';
    $("#ahah").children("br").remove(); 
    setTimeout(function(){node.style.display='';},0);
}

Way what I found: remove all childs from overall DIV, and then append all except BR's:

function removeBr(){
    var ahah=document.getElementById("ahah");
    var childs=[],child;
    while(child=ahah.firstChild) {
        if(!child.tagName||child.tagName.toLowerCase()!=='br')
            childs.push(child);
        ahah.removeChild(child);
    }
    for(var i=0;i<childs.length;i++)
        ahah.appendChild(childs[i]);
}

http://jsfiddle.net/4yj7U/4/

Other variant:

function removeBr(){
    var node=$("#ahah")[0];
    node.style.display='inline';
    $("#ahah").children("br").remove(); 
    setTimeout(function(){node.style.display='';},0);
}
七分※倦醒 2024-12-09 18:25:56

作为解决方法,当您希望它们位于单独的行上时,您可以将样式设置为 display: block ,而当您希望它们成为朋友时,可以将样式恢复为 inline-block

我创建了一个 JS Fiddle 示例

它演示了此修复:

function addBr(){
    $('span').css({ display: 'block'});
}
function removeBr(){
    $('span').css({ display: 'inline-block'});
}

$("#add").click(addBr);
$("#remove").click(removeBr);

As a work around, you could set the style to display: block when you want them on individual lines and revert to inline-block when you want them to be friends.

I have created a JS Fiddle example

Which demonstrates this fix:

function addBr(){
    $('span').css({ display: 'block'});
}
function removeBr(){
    $('span').css({ display: 'inline-block'});
}

$("#add").click(addBr);
$("#remove").click(removeBr);
演出会有结束 2024-12-09 18:25:56

这个错误仍然存​​在,所以这里有另一个解决方法:http://jsfiddle.net/4yj7U/19/

$("span").css('display', 'none');

setTimeout(function(){
    $('span').css('display', 'inline-block');
}, 0);

这使得 Chrome 重新渲染跨度并正确显示它们。

This bug still exists, so here's another workaround: http://jsfiddle.net/4yj7U/19/

$("span").css('display', 'none');

setTimeout(function(){
    $('span').css('display', 'inline-block');
}, 0);

This makes Chrome re-render the spans and displays them properly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文