Avoiding jumping frames in beamer

This issue is addressed in the beamer manual in section 9.5 Dynamically Changing Text or Images, p.85 for v.3.10.

You need to use either the overlayarea environment which is "more flexible but less user friendly" or the overprint environment.

\begin{overlayarea}{⟨area width⟩}{⟨area height⟩}
  ⟨environment contents⟩
\end{overlayarea}

\begin{overprint}[⟨area width⟩]
  ⟨environment contents⟩
\end{overprint}

You then need to use \onslide<⟨num⟩> instead of \only<⟨num⟩>{...}. The numbers must be disjoint.

Example:

\begin{overprint}
  % on every slide (not sure if it is officially supported)
  \onslide<1>
  % on first slide
  \onslide<2>
  % on slide two
  \onslide<3>
  % on slide three
  % etc.
\end{overprint}

Wrap your code fragment inside the overlayarea environment.


The jumping occurs because beamer normally vertically centres the content on the frame.

One way to achieve a constant starting point for content of all heights(*) is to tell beamer to top align the frame. This can either be done on a frame-by-frame basis with

\begin{frame}[t]

or globally for the whole presentation:

\documentclass[t]{beamer}

MWE:

\documentclass{beamer}

\begin{document}

\begin{frame}[t]
    \only<1>{abc}

    \only<2>{abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc }
\end{frame} 

\end{document}

enter image description here

(*) at least for all heights which don't overflow the available text height.