CSS was first conceived when the web was mainly constituted by static pages. During all these years, the web is evolved until it became an actual dynamic media. In fact, CSS rendering takes place only when the HTML structure is fully constructed. Thus, CSS works on a finite state where everything is determined in advance. However, this implies some limits. First of all, a web developer cannot build a layout if all of its possible variables are not well-defined. Take the case of dynamic columns for example: if you have, say, three columns that contains three different images with random sizes, it's very difficult to build a layout that will scale well when the window size changes. Sure, you can align these columns using floats, but you cannot change their size to fit the dimensions of the browser window. You may say that you can use percentage lengths to perform this task, but even in this case you have to know in advance the actual size of an image, because percentages are actually computed in pixels and if you specify a wrong percentage dimension, the image will appear distorted.