Il existe deux "modèles de boîte" différents : l'un ajoute le remplissage (et la bordure) à la boîte spécifiée. width
tandis que l'autre ne le fait pas. Avec l'avènement de CSS3, vous pouvez heureusement basculer entre les deux modèles. Plus précisément, le comportement que vous recherchez peut être obtenu en spécifiant
box-sizing: border-box;
ms-box-sizing: border-box;
webkit-box-sizing: border-box;
moz-box-sizing: border-box;
width: 200px;
dans le CSS de votre div. Ainsi, dans les navigateurs modernes, la division conservera toujours une largeur de 200 px, quoi qu'il arrive. Pour plus de détails et une liste des navigateurs pris en charge, voir ce guide .
Edit : En ce qui concerne votre édition sur pourquoi le modèle traditionnel de la boîte est tel qu'il est, Wikipedia en fait offre un aperçu :
Avant HTML 4 et CSS, très peu d'éléments HTML supportaient à la fois la bordure et le remplissage, de sorte que la définition de la largeur et de la hauteur d'un élément n'était pas très controversée. Cependant, elle variait en fonction de l'élément. L'attribut HTML width d'un tableau définissait la largeur du tableau, y compris sa bordure. D'autre part, l'attribut HTML width d'une image définissait la largeur de l'image elle-même (à l'intérieur de toute bordure). À l'époque, le seul élément à prendre en charge le remplissage était la cellule du tableau. La largeur de la cellule était définie comme "la largeur suggérée pour le contenu d'une cellule en pixels, à l'exclusion du remplissage de la cellule".
CSS a introduit la marge, la bordure et le rembourrage pour de nombreux autres éléments. Il a adopté une définition de la largeur par rapport au contenu, à la bordure, à la marge et au remplissage similaire à celle d'une cellule de tableau. C'est ce que l'on appelle depuis le modèle de boîte du W3C.