# Avoiding jumping frames in beamer

Sometimes I want an element on a frame to change in steps. I do this by

\only<2>{
...
}
\only<3>{
...
}


etc.

But this causes the frame to jump due to different sizes of the included content. How can this be avoided?

-

Wrap your code fragment inside the overlayarea environment.

-

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}

-

When dealing with figures, it can be sufficient to use \tikz[overlay] inside \only:

\only<.>{
\tikz[overlay,xshift=0em,yshift=0ex]{\draw node {
% content goes here
};}
}

-

Use a command phantom to build a same size of the elements.

\only<2>{
...
}
\only<2>{
\phantom{xxxx}
}
\only<3>{
xxxx
}

-
This can result in movement of common items. Using overprint as suggested in other answers avoids this problem. – Liam Feb 1 '13 at 22:45

It seems that encapsulating the content of each step in textblocks often solves the problem of jumping frames. This is an example for a frame:

\begin{frame}
\only<1->
{
\begin{textblock*}{100mm}(10mm,0.2\textheight)
% first content
\end{textblock*}
}
\only<2->
{
\begin{textblock*}{100mm}(10mm,0.5\textheight)
% second content
\end{textblock*}
}
\end{frame}

-
Welcome to TeX.SX. Please provide a full example, instead some fragments. Another reason of jumping frames could be omitted % characters ;-) – Christian Hupfer May 8 '15 at 15:45