Это называется FOUC (Flash Of Unstyled Content), решается любым методом, из общих (пишу для понимания принципов):
1. В самом html файле в head прописать style: * { visibility: hidden; }, т.е. все скрываем, а в самом css файле, пишем * { visibility: visible; }, тогда все элементы после загрузки html будут невидимы, но как только css загрузится и "заведется" все встанет на свои места
2. у body пишем класс body.no-css, аналогично пишем в head прописать style: body.no-css { display: none; } , потом по факту загрузки DOM снять с body класс no-css
ИМХО, подгружать контент страницы после загрузки DOM ajax запросом - это увеличение времени ожидания страницы, что зло. Динамически подгружать второстепенные элементы, чтобы ускорить время доступности основного контента со стилями - хорошо.