Wow, where to start? You have several lists with headings above each, some with notes above and / or below, so the markup you should use is:
<h2>Egg Platters</h2> <div class="note">Served With Home Fries & Toast</div> <ul> <li><span class="item">Two Eggs Any Style</span><span class="separator"> </span><span class="price">2.75</span></li> (etc.) </ul> <div class="note">Add On Any Two Slices ...</div> <div class="note large">Add Coffee for $0.50 with ...</div>
Your class="price" is ok, but class="red" and <strong class="bold"> are bad choices - name the class based on why it is red (for example, my "note"). The use of headings eliminates the need for "bold" to make the text <strong> larger.
Now I put in <span class="separator"> so that you can give width or use floats, and allow the empty space of the separator to expand to fill between the element and the price, and you can create it with something like
.separator { border-bottom: 1px dotted #333; }
EDIT: I also agree with the ClarkeyBoy comment; limiting the overall width will help readability, and the TripWired link shows a good method (and uses essentially what I suggest)
source share