I don't think table-layout: fixed
does what you think it does. It only affects the way the rendering of the table is achieved, it doesn't really fix
If there is a gap when you hide a column then you are probably using visibility: hidden
rather than display: none
- which would completely remove them from the page.
I haven't managed to fully conquer column widths. I've found that it can work if I insert DIVs into cells and set these to a specific width.
Otherwise you could apply a class to every td/th and use JS or jQuery to switch these classes.