You asked WHY, not how to cheat it:
Usually because of laziness of programmers of the initial implementation, because they HAVE already put way more effort in other features, delivering more odd side-effects like floats, because they were more requested by designers back then and yet they haven't taken the time to allow this so we can use the FOUR properties to push/pull an element against its neighbors (now we only have four to push, and only 2 to pull).
When html was designed, magazines loved text reflown around images back then, now hated because today we have touch trends, and love squary things with lots of space and nothing to read. That's why they put more pressure on floats than on centering, or they could have designed something like margin-top: fill;
or margin: average 0;
to simply align the content to the bottom, or distribute its extra space around.
In this case I think it hasn't been implemented because of the same reason that makes CSS to lack of a :parent
pseudo-selector: To prevent looping evaluations.
Without being an engineer, I can see that CSS right now is made to paint elements once, remember some properties for future elements to be painted, but NEVER going back to already-painted elements.
That's why (I guess) padding is calculated on the width, because that's the value that was available at the time of starting to paint it.
If you had a negative value for padding, it would affect the outer limits, which has ALREADY been defined when the margin has already been set. I know, nothing has been painted yet, but when you read how the painting process goes, created by geniuses with 90's technology, I feel like I am asking dumb questions and just say "thanks" hehe.
One of the requirements of web pages is that they are quickly available, unlike an app that can take its time and eat the computer resources to get everything correct before displaying it, web pages need to use little resources (so they are fit in every device possible) and be scrolled in a breeze.
If you see applications with complex reflowing and positioning, like InDesign, you can't scroll that fast! It takes a big effort both from processors and graphic card to jump to next pages!
So painting and calculating forward and forgetting about an element once drawn, for now it seems to be a MUST.
<span>
tag and the way it gets parsed throws extra line breaks at the beginning of the block of code. With negative padding, I could make this extra space go away. – Steven Lu