Frames were never necessary for menus and tables of contents
One of the big excuses for HTML frames, back in the days when anyone tried to use them at all, was that you needed them to do websites with tables of contents and similar things (I was reminded of this when a commentator sort of mentioned it in passing on here). This excuse was always bunk.
We can see how much bunk it is by looking at pretty much any blog, where you will find things that look an awful lot like a table of contents (and menus and so on, all of those things that frames used to be used for), none of which uses HTML frames. But, you might say, blogs are all built with various sorts of blogging engines and content management systems.
What was really going on with this excuse for frames is that people were using a bad HTML feature to cover up (or deal with) the lack of decent backend technology. The attraction of frames was that you had one file with just the table of contents and one file with just each bit of the content and so on, and HTML put them together for you (at the cost of a bad user experience). Any templating system would have done that for you just as well as frames did, probably with more flexibility, and the result would have had a much better user experience.
(With some more work, templating still copes with more sophisticated systems that had multiple, different tables of contents that still use the same actual content. And even back in the day when it theoretically wasn't feasible to run a program on every web request, you could perfectly well use a templating system that pre-built the actual HTML files.)
You don't even need much of a templating system, since frames aren't really very sophisticated themselves; for a table of content, all you need is file inclusion. File inclusion is really easy to do, sufficiently easy that Apache has had an option to do it for you for some time (I believe it dates from the heyday of frames, for that added annoyance).