There's the logical layer of the Internet and there's the physical layer of the Internet. Ethereum is a tool for decentralizing a particular part of the logical layer of the Internet. The physical layer of the Internet remains to be decentralized. (Meshnet projects like Hyperboria are taking aim at that aspect of decentralizing all the things.)
Ethereum can be paired with software such as the Mist browser, Whisper, and IPFS (and the upcoming Swarm) to provide a decentralized, Web-like experience. HTML, CSS, and JS are all used exactly as they were before. They're just part of the presentation layer, and they don't really care about how they're passed around. Whether they're being downloaded from a central server somewhere or a swarm of peers, it's all the same to them. They're just text files with special filename extensions.
Ethereum proper allows some of the logic that currently lives on centralized servers to be moved onto a blockchain. In some cases, all the logic currently living on centralized servers can reasonably be moved over. In most cases, the greatest value-add is going to come from moving only over the most sensitive components that must be agreed upon by all parties and either keeping the more computationally-intensive components on a central server somewhere, or else employing a weaker form of consensus, such as Piper Merriam's Ethereum Computation Market.
And, of course, if there is private data involved that cannot under any circumstances be shared with the public, you're either going to need a central server for that or you're going to need to employ some clever cryptography to decentralize that aspect as well.
Best Answer
This mostly depends on how you define "DApp".
Following the definition of Buterin, a DApp is an application that doesnt have any central components (simplified). So all data is essentially stored in smart contracts on the blockchain and/or using concepts like IFPS.
The app itself (UI code, business logic, etc) is then run (and stored) by every user.