Rafael Holt wrote:

> Hi all,
>
> I've been playing with clip recently and it seems to me the spec is a bit
> counter-intuitive. It is particularly irritating if you are clipping
> non-fixed width elements because if you don't want it to be clipped on 
> the
> right, you have to specify its width for that value. Surely it would 
> be more
> logical for each value to represent how much is clipped from that edge of
> the rectangle? For example:
>
> clip:rect(10px 100px 80px 20px);
>
> If the element to be clipped is 100px x 80px, this will cause it to be
> clipped to an area 70px x 80px, where it is clipped 10px at the top 
> and 20px
> on the left. This is fine, but why should it be necessary to specify 
> 100px
> for the right and 80px for the bottom? It seems to me it would be more
> sensible for these values to be 0 to achieve this effect. It's easier 
> to get
> your head around.
>
> Also, why is it that it applies only to absolutely positioned 
> elements? Why
> not relatively positioned ones?
>
> Cheers,
> Rafael
>
Hi Raphael,
According to the css2.1 specs 
<http://www.w3.org/TR/CSS21/visufx.html#propdef-clip>
... a clipped element is *not* removing certain parts of the element by 
shrinking the margins, but is a porthole to a *defined area* of the 
element (mostly: image) which has to be shown. It is a bit confusing 
because it is a completely other way of thinking! :-)

   * See examples over here
     
<http://home.tiscali.nl/developerscorner/imaging/clipping-images-with-css-a.htm>
 


I guess it is done this way because of if shrinking of a margin is 
needed, it can be done by placing the element in a container of a given 
width and height (determining the visual area) and a given negative 
margin-top and margin-left to shift the inside image to the right place. 
- This can be done with relative positioned containers too.For IE I 
think it will be needed to set the overflow to hidden, because of the IE 
exaggerating habits.

Second way to accomplish the same, is to put the img as background image 
in a container (giving the needed area), with background positioning to 
get it in place.
Third way could be to make an iframe, and put the (shifted) image in a 
separate html file.
And maybe the easiest way: make a new image just in the right 
proportions by cutting what is not needed. ;-)

The absolute positioning will be a condition to define the starting 
point (0,0) from which the area is computed. Maybe a surrounding 
container with relative position can help to place the clipped thing on 
the right place in the layout.

If in a clipped element there is no clip wanted in a certain direction, 
the specs say a value of "auto" can be used (not: zero).

To make a clipped element in relative units, I discovered that this is 
not cross browser consistent. IE doesn't recognize a % unit (showing the 
complete image). If you do it with em's, the position is shifting (and 
the area is getting bigger or smaller)(try for the effect!) in IE and 
FF. On the contrary, Opera has it's own zoom mechanism, and does show no 
shift and no enlarged or smaller area, but just a scaled image inclusive 
the scaled clipped area.

And notice that IE(6) doesn't react on the "modern" way of writing:

    rect(50px, 300px, 350px, 100px)

only on:

    rect(50px 300px 350px 100px)

while the specs say that both ways are allowed.

Greetings,
francky

PS:
If you have a more specific question, we can see what we can do.
______________________________________________________________________
css-discuss [EMAIL PROTECTED]
http://www.css-discuss.org/mailman/listinfo/css-d
IE7 information -- http://css-discuss.incutio.com/?page=IE7
List wiki/FAQ -- http://css-discuss.incutio.com/
Supported by evolt.org -- http://www.evolt.org/help_support_evolt/

Reply via email to