Why is this done?
By default, browsers have built-in definitions for HTML elements. For example, <body> and <p> have a margin , <ul> and <ol> have padding and list-style , and so on. In each browser, these preset values can be different, respectively, normalize.css or reset.css are needed in order to start from the same base. Their difference is that normalize.css brings all elements to the same style, and reset.css resets everything completely to zero. Personally, I prefer to use reset.css , because, as a rule, all the elements are then overridden anyway, and for each project a kind of UI kit is formed. But if you are laying out a page without defining the definition of all elements, then it is possible that normalize.css is suitable for you - so you will not need to set indents between paragraphs and headings, redefine lists, etc.
Styles which elements should be redefined at the very beginning?
It all depends on what strategy you have chosen :) My required set:
*, *:after, *:before { box-sizing: border-box; margin: 0; padding: 0; }
Where can I read about it in more detail and find the code?
Good article on HTML academy and on Habré .
Code: reset.css , normalize.css .
PS reset of the future will look like this:
* { all: unset; } head { display: none; }