You need to use | to run multiple commands:
set tabstop=2 | softtabstop=2
It doesn't matter if you're using multiple lines, you still need to use the |:
au BufNewFile,BufRead *.html, *.css
\ set tabstop=2
\| set softtabstop=2
\| set shiftwidth=2
You can set multiple values with set, so the same can be expressed as:
au BufNewFile,BufRead *.html, *.css
\ set tabstop=2 softtabstop=2 shiftwidth=2
You probably want to use setlocal, rather than set. set will affect all buffers, so your autocommand will also change the settings for a .js buffer for example. setlocal will only affect the current buffer.
au BufNewFile,BufRead *.html, *.css
\ setlocal tabstop=2 softtabstop=2 shiftwidth=2
Using the Filetype autocommand is probably better too. There may be other cases where the html or css syntax is loaded (for example my setting it manually):
au FileType html,css
\ setlocal tabstop=2 softtabstop=2 shiftwidth=2
Personally, I always want these three settings to have the same value, if you use shiftwidth=0 it will use the value of the tabstop setting, and softtabstop=-1 will make that use the shiftwidth setting, so then you can use:
set shiftwidth=0 " Use tabstop
set softtabstop=-1 " Use shiftwidth
au FileType html,css setlocal tabstop=2