I'm currently playing around with CSS gradients and position, I kind of manage to do what I want but with lucky guesses but I'd like to understand how this actually all works.
For instance, here's the French flag (merci):
.serge_testDraw {
width: 10rem;
height: 10rem;
border: 0.2rem solid black;
background-image:
linear-gradient(to right, blue 0%, blue 100%)
, linear-gradient(to right, white 0%, white 100%)
, linear-gradient(to right, red 0%, red 100%)
;
background-size: calc(100% / 3) 100%;
background-repeat: no-repeat;
background-position: 0%, 50%, 100%;
}
How come the background position is 0%, 50, 100% instead of 0, 33.33%(a third), 66.66% (two third)?
Plus, I'm clueless how to position backgrounds whose size is 100%.
Like Woodrow said because of your background-size rule who gonna apply for each background, each background gonna take a third of your flag so 0% it's starting point for the first background.
Second one gonna take a third again but to be more easy to understand think 50% it's center more than 50% this is why he is in the middle and take a third of container. You can use center instead of 50% if you want.
Here's mozilla's doc about background-position
A percentage value for
background-position
does not position the origin of a background image with respect to the background positioning area. It positions the entire image. This means the dimensions of the image itself are also taken into account (after resizing it withbackground-size
).A background position of
100% 100%
is analogous toright bottom
, positioning an image such that the bottom right corner of the image touches the bottom right corner of the background area. Similarly,50% 50%
is analogous tocenter center
, placing the midpoint of an image on the midpoint of the background area.Imagine sliding a rectangular tile around the interior of a rectangular frame; moving it all the way to the right (i.e. 100%) means having its right edge touch the right side of the frame (since you can't slide it through the frame), and moving it to the bottom means having its bottom edge touch the bottom of the frame.
Generally speaking, for any
background-position: x y
where the two values are percentages, the x point of the image is aligned with the x point of the background area, and the y point of the image is aligned with the y point of the background area.CSS2.1's description is painful to read so I'll quote CSS3 Backgrounds and Borders instead, where there's even a graphical example:
But if you're like me, and you're terrible at visualizing this in real time, then just think of a sliding puzzle instead.
Note that none of this applies to absolute values; absolute values do position the origin of the image. However, the reference point can be changed if you anchor the absolute value to the right and/or bottom sides, for example
right 10px bottom 10px
positions a background image 10 pixels away from the bottom right corner of the background area.If you want to position a background image whose size is 100% of the background area, you won't be able to use a percentage, since you can't move a tile that fits its frame perfectly (which incidentally would make for either the most boring puzzle or the perfect prank). This applies whether the intrinsic dimensions of the background image match the dimensions of the element, or you explicitly set
background-size: 100%
. So, to position the image, you will need to use use an absolute value instead (forgoing the sliding-puzzle analogy altogether).The
background-position
property sets the position of the center of the background. You've specified that all backgrounds have a width ofcalc(100%/3)
and a height of100%
, then you've specified the x-position for the center of each of the three backgrounds (the y-position defaults to 50%).