Потому что при абсолютном позиционировании свойство top указывает позицию с верхнего края ближайшего родителя вниз, а если указать отрицательное значение, то будет с верхнего края вверх. Если надо относительно нижнего края вниз на всю высоту псевдоэлемента, то можно использовать, например, bottom: - высота_псевдоэлемента_px, либо указать максимальную высоту через top: 100%, что проще.