Si quieres que quede por fuera te bastaría con darle un valor negativo a
right igual a su ancho. Así quedaría justamente en el borde de
#portafolio. Además de ser más limpio que inventando
pirulas variopintas con márgenes y cosas raras.
Que
no funcione el margen izquierdo es normal, porque
estás indicando que esté a la derecha. El margen te lo hace seguramente, pero no
empuja el elemento a la derecha como esperas que haga por ese
right:0.
Si pusieras un margen a la derecha, verás que funciona perfectamente el margen. Y al revés, si especificas
left:0 y luego indicas
margin-right:20px parece que no hace nada. Piensa que usando
right y
left es como si estuvieras alineando algo a la derecha e izquierda respectivamente.