A CSS-only version would not have very good browser support. It would involve putting the header tag after the content, followed by manipulating the positioning of the elements.
Here's a very hacked together CSS-only solution. IE 9+. You should do this using JavaScript instead as others have suggested.
http://jsfiddle.net/znLMe/
CSS
article p:empty + header {
    display: none;
}
article p:empty {
    margin: 0;
}
article p {
    float:left;
}
article header {
    position: absolute;
    top: 0;
}
article header h1 {
    margin: 0;
}
article > p:first-of-type:not(:empty) {
    padding-top: 1em;
}
article {
    position: relative;
}
/* include clearfix */
HTML
<article class="clearfix">
    <p></p>
    <header><h1>Hidden article</h1></header>
</article>
<article class="clearfix">
    <p>Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum. Cras mattis consectetur purus sit amet fermentum. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cras mattis consectetur purus sit amet fermentum. Nulla vitae elit libero, a pharetra augue.</p>
    <header><h1>Porta Malesuada</h1></header>
</article>