Вы определяете цвет в определенных точках. Так что в вашем случае ...
background: linear-gradient(red 10%, green);
Это означает, что div составляет red
при 10%. Поскольку вы не указали иное, браузер предполагает, что вам нужен красный от 0 до 10%.
Вы также сказали, что хотите изменить цвет на green
, но не определили точку, где это должно произойти, поэтому браузер предполагает конец div (или 100%).
Чтобы получить эффект, который вы ищете, вам нужно что-то вроде этого:
background: linear-gradient(red, green 20%);
Это начинается с red
(при 0%), затем постепенно уменьшается до green
к тому моменту, когда оно достигает отметки 20%, а затем продолжается green
с этого момента (до 100%).