Is there a more semantic way to markup Price Lists? Example as Table and as Description List
I'd say stick with the table.

Yes, tables are frowned upon - if you use them for purely visual purposes. But this isn't "just" layout; it's information structure. And these are tabular data sets so semantically speaking tables are the right choice. There's nothing hacky about it; the table element was made for this sort of thing.

Meanwhile, dls are for terms and their definition(s). Semantically speaking, is an item defined by its cost? Eh, not quite. Of course this is a rather pedantic interpretation I'm applying, and a dl solution wouldn't be completely crazy, but still.

Flexibility is another issue: If an item only has name and cost, sure, a list will work. But what if that's not all? What if you need to add a column for the number of units ordered/in stock/shipped/whatever. Or an SKU column? Or anything else, really?

Yes, you can have multiple dd elements following a dt but you'll have to do all the layout yourself for n "pseudo-columns" of unknown content, whereas a table just works it out for you including resizing itself, wrapping text where necessary and all that. Again: It's made for this.

Think of it this way: If it wasn't a web page, and you just had to make a document, wouldn't you use a spreadsheet, or at least use table in a word processor? If yes, use a table in on the webpage too.

Other stuff:


I'd add a thead element with th elements for column headers, and wrap the rest in a tbody
I'd probably use a span for the total cost instead of strong. Give the span a class like cost or amount or total for styling purposes. I'm assuming you just want the price to stand out visually, but using a strong is a bit, well, strong. A span, meanwhile, doesn't imply much at all about its content. Even a good ol' b tag could be used here. b simply says "this text is bold" without implying why it's bold - which is why you don't often see the b tag anymore: no semantic purpose. But that's kinda what you want here; just some bold text for visual purposes.