Internet Explorer and column collapse

 

So, you have built a beautiful CSS layout. It looks great. You feel powerful, knowledgeable and wise. Then you start adding real content to the layout - images, lists, links etc.

Suddenly you layout does not look so great in Internet Explorer. For some reason columns are now wider. In some cases the column width increases so much that the entire layout breaks and the column drops below the rest of the content. Your confidence is shattered. You curse CSS and think about table-based layouts. At least they “work” in IE.

Of course, there is a solution.

I was discussing this problem recently with Cameron Adams who suggested that negative margins could be the answer. He was, as always, right... with some simple additions.

Three steps to freedom from IE column collapse

In sample 1 (below), all browsers except IE will render the column to the correct width and allow wider elements to poke out the right side of the container.

However, IE honours the width of the content rather than the container, so the container is much wider.

Step 1

Add negative margins to the right edge of all elements being affected. In this sample, the affected elements include an unordered list, an image, a <div> and a table.

#column img { margin-right: -500px; }
#column ul { margin-right: -500px; }
#column div { margin-right: -500px; }
#column table { margin-right: -500px; }

We have tricked IE into thinking that the offending elements are very narrow. IE will now render the container to the correct width.

The width is specified to "500px". This unit can change to suit your needs. If you have one image poking 100px out the right edge, then you will only need a negative margin of 100px. A large amount is a safer option if you cannot be sure of the column width or possible content inside.

Before we move on, you can collapse all of the rules above into multiple selectors with the same declaration block:

#column img, #column ul, #column div, #column table { margin-right: -500px; }

You've probably noticed that the elements have been cut off in IE. So, let's deal with this issue.

Step 2

Apply "position: relative" to the relevant elements.

#column img, #column ul, #column div, #column table
{
margin-right: -500px;
position: relative;
}

Most of the elements are now rendering correctly. However, The the url strings are still cut off to some degree, so we need to fix them.

Step 3

As suggested by Mauricio Samy Silva, we need to give the <ul> element some dimension to overcome IE's hasLayout issues. This can be achieved using:

#column ul
{
margin-right: -500px;
position: relative;
height: 1%;
}

The url strings are now visible!

A simpler method

Some people may prefer the elements to be cut off rather than poking out. In this case, you can ignore the steps above and simply apply "overflow: hidden" to the entire column. The overflow hidden option is much simpler to apply, as it does not involve styling any of the affected elements.

#column { overflow: hidden; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值