All you need is
```css
.cell.selected~.unselected { display: none; }
.cell.code_cell.unselected .input { display: none; }
```
Concretely, paste the following in your first cell.
```html
%%html
<style></style>
.cell.selected~.unselected { display: none; }
.cell.code_cell.unselected .input { display: none; }
```
As soon as you run it
This means you can run through your notebook from top to bottom, revealing cells one by one, and letting your audience see previous markdown cells and outputs, while focussing on at most one code cell at any given time.
Bonus points for using interactive widgets whose state is modified after their creation, while staying visible, making for a truly interactive experience.
The above videos were produced by using this CSS trick in our 3D point cloud processing demo, see the corresponding blog post, the static slides or the reproducible source code.
JupyterLab users will need three lines of css.
```css
.jp-CodeCell .jp-Cell-inputWrapper { display: none; }
.jp-CodeCell.jp-mod-selected .jp-Cell-inputWrapper { display: block; }
.jp-Cell.jp-mod-selected~.jp-Cell { display: none; }
```
For those who like reveal.js and are happy showing a pre-rendered notebook, exporting to slides is built into jupyter, see @mjspeck’s walkthrough.
If getting a reveal.js experience on a live notebook is what you’re after, check out the excellent RISE notebook extension, version 5.1.0 just came out!