简体   繁体   中英

Stray end of tag head

I am trying to learn to use framesets in HTML. So, I started a little website with a friend. In following page (index.html) i receive an error on line 13: "Stray end of head tag". Why I get this error?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html>
    <head>
        <title>Metal's page</title>

        <frameset cols = "20%,*" frameborder = "0">
            <frame src = "pages/menu.html">
            <frameset rows = "10%,*" frameborder = "0">
                <frame src = "pages/title.html">
                <frame name = "main" src = "index.html">
            </frameset>
        </frameset>
    </head> 

    <body bgcolor = red>
        <br/><br/><br/>
        <p>Hello, my name is Mihai, but one of my best friend call me "Metal". This is our web page. Enjoy!</p>
        <br/><br/>
    </body>
</html>

Website address: metalblog.besaba.com Thanks!

You don't actually get that error message with that document, unless you manually tell the validator to ignore the DOCTYPE and use HTML 4.01 Frameset instead.

If you do that, or if you change the DOCTYPE to HTML 4.01 Frameset DOCTYPE, you get the error “ end tag for element "HEAD" which is not open” because the <frameset ...> implicitly closes the head element, so you are not allowed to close it again.

The reason for the implicit closing is that in a Frameset document , the frameset element appears instead of the body element, after the head element. There is no body element, since the contents of the frames are all that is displayed.

The following document validates:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" 
                      "http://www.w3.org/TR/html4/frameset.dtd">
<html>
    <head>
        <title>Metal's page</title>
    </head> 
        <frameset cols = "20%,*">
            <frame src = "pages/menu.html">
            <frameset rows = "10%,*">
                <frame src = "pages/title.html">
                <frame name = "main" src = "index.html">
            </frameset>
        </frameset>
</html>

Note that I have removed the frameborder attributes. They are not valid in HTML 4.01 (or in any other HTML version). If you want to remove the borders between frames, you have to use that attribute and accept that the document is not valid. At least there was no way to remove the borders a few seasons ago, when frames were still used by some, though so last season; I don't think there has been any change in this respect.

It's probably because you have put your frame set inside of the head tags and not the body tags. All content should go in the body.

First of all, you are using a Strict DOCTYPE, which does not permit framesets. Change to a frameset DOCTYPE. Run your markup through validator.w3.org until you are error free.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM