First look at the statement in the Intermediate Value Theorem writeup. Since we are going to use the fact that f is continuous at a point p in the proof twice let us restate the definition here.

Given any e>0 there exists a d>0 such that |f(x)-f(p)|<e for all x such that |x-p|<d.

Consider the set X={x in [a,b] : f(x)<=0}. Now X is nonempty (since a is in it) and b is an upper bound. Thus, if we define c=sup X then we know that c exists and is finite. So our aim is to prove that f(c)=0.

Suppose that f(c) > 0. Continuity at c tells us that, given some e > 0 we have a d > 0 such that f(x) > f(c)-e for all x with x > c-d and x < c-d.

There are two things to note, firstly we can choose e as small as we like, so f(x) > 0 in this range. Second, by the definition of c we have f(x) > 0, as soon as x > c. Thus, we have f(x) > 0 for all x with x > c-d. It follows that c is not the supremum after all, a contradiction.

Likewise suppose that f(c) < 0. This time continuity tells us that for any e > 0 we can choose a d > 0 such that f(c+d) < f(c)+e. Choosing e small enough, we have f(c+d) < 0. This again contradicts the choice of c.

Thus we have f(c)=0. Finally, c really is in the open interval since f(a) and f(b) are nonzero, by assumption.

If one knows something about the connectedness property then one can give a rather shorter proof. But this relies on proving things about connectedness which again use similar arguments to the above.