You can get ferries from Gibralter to Tangiers or Ceuta (Spain). Shortest crossing is from Tarifa (close to Gibralter on Spanish side). Cost of Tarifa to Tangiers is 31 Euros each way (55 Euros return for day trip). EU passport holders can get their passport stamped by Moroccan authorities on the boat.
Crossing takes 35 minutes.
I know all this because I did it last week.