Continuity Between Metric Spaces
Even if we are mostly interested in continuity between nonmetric spaces I think it helps intuition if we look at metric spaces first. The diagram shows a function from X with a metric δ to Y with a metric ξ. We have an open set which is a ball around x and an open set which is a ball around f(x). For continuity, as the ball around x gets smaller we want the ball around f(x) to get smaller. 
To visualise this as a function better lets draw these balls in two dimensions only: 
As an example of a function that is not continuous lets take a function that has value 1 when x<3 and has value 4 when x<=3. 
Here we can see that there is a smaller ball (open set) in Y but it doesn't have a corresponding ball (open set) in X. So we can start to see that there is a requirement, for continuity, that open sets in Y map through f^{1} to open sets in X. 
Continuous Maps
A function is continuous if it doesn't jump, that is, when two inputs of the function get close to each other then the corresponding outputs of the function get close to each other.
Here we discuss the most general form of continuous map which also applies to nonmetric topological spaces.
A continuous mapping implies a limited kind of reversibility, at least locally.
Definition 1
Here is one definition of continuity, based on open sets:
Let X and Y be topological spaces. A function f : X>Y is continuous if f^{1}(V) is open for every open set V in Y. 
Definition 2
Another definition of continuity, based on neighbourhoods, is equivalent to the above definition.
Let X and Y be topological spaces. A function f : X>Y is continuous if for every xX and every open set U containing f(x), there exists a neighbourhood V of x such that f(V)U. 
More detail about continuity on page here.
Continuous Surjective Maps
Here is an extreme case of a Surjective Map which maps to a single point. This seems to meet the requirements as there is an open set round the whole preimage. We can think of surjections which meet these requirements as 'nice surjections'. See fibrations 
Continuous Injective Maps
Here is an extreme case of a Injective Map which maps from a single point. In this case all the open sets in the codomain need to map back to a single open set in the domain. This meets the requirements so it is a 'nice injection'. See cofibrations 
Continuity as Pullback
This diagram shows a set of points being mapped to another set of points (in red). For that map to be continuous the preimage of every open set must be an open set (shown as blue map in the reverse direction). 
Continuity of Maps between Lattice Structures
So far we have drawn diagrams with intersections and unions (Venn diagrams) but we could also draw these in terms of logic. 
Examples
In this diagram the points stay within their open sets. This is a continuous map, the preimage of every open set is an open set. The intersections and unions of open sets play nicely together.  
This next example is not a continuous map because the preimage of A is not an open set because it includes A and A/\B but not B. We could think of this as a tear.  
Again this example is not a continuous map because the preimage of A is not an open set.  
In this example the whole space is shrunk to a point. This is a valid continuous map because the preimage A\/B is an open set. 
Homotopy
If we have two topological spaces X & Y with two continuous maps between them F & G then a homotopy is a continuous map between F & G. In order to see how this is related to the map between the cup and torus I have drawn a map from a third shape (in this case another torus). So as F continuously maps the G then the cup maps to the torus. 
We can move the continuous map forward from the functions to the domain so the functions are homotopic if: H: X × [0,1] > Y where:
We can think of this as 'filling in' the gap between F and G so that we can take any path through it. 
Or we can draw it in the codomain (currying) so that each element in X maps to I>Y. 
More about homotopy on page here.
Transport
from here  transport : Path U A B > A > B 
That is, if we have a path from A to B and A, then B.
Composition of Paths
We want to compose these two paths:

from here 
compPath (A : U) (a b c : A) (p : Path A a b) (q : Path A b c) : Path A a c = comp (<_> A) (p @ i) [ (i = 0) > Where 'comp' is a keyword with the following parameters:
