HTDML: the people's convention

A guide on how to
de-manipulate yourselves
 

Working draft:

Edited live in development.
Not because I múst...
But because I can

Let us make a deal

First of all: what is HTDML❓
It's a world-wide badly needed, completely new and innovating webdevelopment-convention with the purpose of taking away all the complications that 🤮 JaVaScRiPt 🤪 (which is executed on visitors' devices and cán do damage) brings to modern webdevelopment ('unsafe-inline' frameworks, dependancy-hell, lock-in techniques, dark-patterns etc.) and to promote the usage of custom-tags like described in the HTML5-standards.

HTDML is a concept of: extended semantics, KSS (Keep it Stupid Simple), an extra layer of security by using a strong CSP without 'unsafe-directives', no risks of malicious codes executed on the visitors' machines, privacy-respecting (no javascript tracking cookies), preferrably no sessions (no session-cookies), no processing of unsafe user-input but returning it if the input is not as expected, providing freedom to all people who want to make webpages (no bigtech-rules but freedom of expression; let bigtech adjust to the public instead of vice-versa), promotion of free stuff all over the internet, all-inclusivity, managing unwanted bot-traffic etc. etc. So it's not just a bunch of custom-HTML5 tags, it's a whole new way of thinking about how to re-shape the World Wide Web. Second: why HTDML❓
HTDML stimulates the usage of custom HTML5-tags because they bring freedom to webdevelopers / webmasters: the freedom you need and the freedom that has been taken away from the people, the same freedom that you had around the year 2000 before SEO was brought into the world. Instead of strictly following the so called "best-practises" which only are limiting you, custom-tags give you all the power you need to create beautiful things and not only standard-websites like there are millions of them.
Given that: HTDML / custom-tags are tools to take back the web from corporate institutions and to give it back to the people for whom the internet has been invented.

HTDML combines the powers of HTML5, CSS and PHP, which will open up the web for people who don't have any experience with making websites (I guess 99% of the personal websites that were on the internet, have gone away because of over-complicating. Mainly because of the usage of 🤮 JaVaScRiPt 🤪 , SEO and modern development-hypes that bring no extra functionality at all but only extra layers of complications and unexpected behaviour). The D stands for Dynamic and Democratic, because HTDML in it's pure form is dynamic and democratic by default, it's supposed to be a forever working draft that focuses on collaboration between webdevelopers, companies and most important: all the people who use the internet, not one of them excluded.

Use-case specific: The HTML5-standards offer a lot of freedom with custom-tags, but no clear guidelines. Therefore custom-tags are not used widely and the non-semantic tags <div> and <span> are still being used everywhere in high numbers, while the possibilities of custom-tags are endless. Hopefully the HTDML guidelines fill in that gap without dictating anything, just giving some basic tips to get you started.

To be absolutely clear: HTDML means to bring more freedom in developing websites, by no means it wants to dictate anything, see my custom-tag-propositions as a result of my experiences using custom-tags, they can be very powerful, but designing a whole ecosystem of your own custom-tags is pretty difficult, for that reason these guidelines are here: to help you get on your way using custom-HTML5-tags like:
<Annie-s-receipes>
or:
<Joe-s-handy-tips>
or:
<my-personal-opinion-about-all-the-taxes-I-have-to-pay-every-month>

Remind you: HTDML is fully valid HTML5, therefore you can use the regular validators: w3-validator and nu-validator. Related pages:
Standard HTML5 tags-table (and a bit more)

Custom-HTDML tags-table (where the fun is)

Custom tags stylesheet (where the magic happens)

Not an advertisement, but looks like it

Don't miss this:

Mojeek, privacy-free search.
No tracking and honest results.
Beats all the others.

Mojeek community

Search with Mojeek.com, the only true privacy-free search engine

 



(Not an advertisement)  Genealogie (NL) Portugal life Colorpicker Websafe fonts

Mistral, highly knowledgable AI-assistant.
All languages available.

Beats searching

Try Mistral Chat AI, you can speak whatever language you want
 

Recommendations:

Not HTDML:
- <span> (see the propositions below)
- <div> (see the propositions below)
- JavaScript (HTDML does not apply to JavaScript because you can perfectly do without and JavaScript is unsafe by design and misused for data-harvesting (privacy-issues), that's why you can switch it off in the internet-settings)
- Inline styles (because of the risk of XSS)
- The CSS-property: !important (because this is just a bad habit, you need to change the cause and not the symptoms)
Maintain / respect default tags: you can style them, but don't replace them Respect the rules about custom-tags, some important rules are: always use 1 hyphen at the least, respect nesting-rules, always use a closing tag, don't put block-level custom-tags inside inline tags etc. A custom-tag is inline by default, if you want block-level behaviour then give it display: block or display: inline-block in your CSS If certain behaviors of a standard HTML5-tag need to be applied often, then you could create a function-describing extension of this tag with 2 positions like: <function-tag>, or: <b-warning> (because bold letters are standing out) or <i-footnote> because footnotes are usually italic. Remember that you can also style a standard-tag (f.e. <i>) directly (without making a custom-tag) with CSS to give it it's desired default behaviour without making a whole new tag for it, but then you can never go back when you only want the default style in a piece of text that needs to only be italic, so be careful with restyling standard-tags. Some custom tags can influence the responsiveness of your website, especially when you nest high-level block-tags like <section> within them or tags with the CSS-property "white-space: nowrap". F.e. a tag that gives an extra top-margin like <margin-top> or <p-p> should be put ánd closed on the top of the paragraph / section (when you are going to nest the above examples), like:
<p-p>&nbsp;</p-p><br>
<section>
Your section here
</section>

This way you will never break anything within the section.
The &nbsp; is just to give the tag some content if you don't want text there (= good practise).

But: if you're only going to make a piece of (inline) text, it will be perfectly fine to nest them in a p-p custom-tag like this:
<p-p>text<br>
text2<br>
another inline something</p-p>
For preferrably 3 frequently used combinations, you could create a custom-tag (tip: use alphabetical logic): <b-i-q>, not: <q-b-i> of <b-q-i>.
But if you use 1 <custom-tag> with 1 standard tag, then you could just do <custom-tag><standardtag> and if you use something like that often, you can merge the CSS of the standard tag with the CSS of the custom tag or you could create a second custom tag with the same naming convention so that you can see that they are related (like <text-large> and <text-inner> both begin with "text"). Just remember: the tag-layout that you need most, should be the standard-behaviour.
Don't over-complicate: it is wise to not mix two tags together, like <b> and <i> to make <b-i> because that will cause a lot of extra tags while <b><i> is easy enough to do.
A highly important one:
Replace all non-semantic tags by semantic self-documenting forms, for example: <div> and <span> are the same things, but span is inline and div is block.
Do (something like) this:
<part-shell><part-inner-shell><part-inner-shell2> instead of <div><div><div>. A span is <text-inner> and a span in a span is <text-inner2> etc.
Note: <text-inner>'s are always display: inline, <part-shell> and <part-inner-shellx> are always display: block. <part-grid> is display: grid and <part-flex> is display: flex.
Example:
<part-shell>
  <part-inner-shell>
    <part-inner-shell2>
      <part-inner-shell3>
        <text-inner>text-inner<br>
          <text-inner2>Text inner2</text-inner2><br>
        </text-inner>
      </part-inner-shell3>
    </part-inner-shell2>
  </part-inner-shell>
</part-shell>

That looks só much better than: <div>
  <div>
    <div>
      <div>
        <span>text-inner<br>
          <span>Text inner2</span><br>
        </span>
      </div>
    </div>
  </div>
</div>

 

Use meaningful custom-tags rather than classes for inclusivity (like screenreaders), make your code aria-friendly by default. Ofcourse: you will always need classes (do you really?), but very often a custom-tag will do the job just as well ánd custom-tags are being parsed quicker than classes, because of their specifity-level in CSS (note: it ís possible to not use any CSS-classes at all, been there, done that, but validation will be tricky because of certain specific rules, like the rules for lists, <li class="myclass"> is perfectly valid, but <my-class><li> will not validate and can cause lower SEO-scores, in this case you need to switch them: <li><my-class>mytext</my-class></li>).
Generally: I use classes almost only for exceptions, for items that really need their own specific styling, if the styling is more general, I make a custom-tag for it.
I put the default vertical margin unit at 4em (horizontal: auto) and I created a margin-top-tag: <margin-top>, this clearly gives a top-margin of 4 em, if you only need a margin of 2em then there's <p-p> for that, which basically is 2 <p> tags. I also styled the <hr> tag with a top and bottom margin of 4em, which will give a clear break between two pieces of content. Default horizontal margin unit: 2.4em (vertical: 0), 2 tags: <tab-left> and <tab-right> being 2.4em = 4 x &nbsp; (this can differ per website, depending on the original font-size in html or body), this is very handy if you want to give a piece of text an indentation, like within a code-block. Nest it in a tab-left combination and the block will jump 4 &nbsp;'s to the right. Tags with colorvariables: these tags are purely made for styling (parts of) text, the var- prefix refers to CSS-colorvariables, which doesn't mean that you háve to use these colorvariables and you can ofcourse add as much styling to it as you want, like text-shadow etc.
<var-colorname> and <varbg-colorname> (replace "colorname" with the name of your colorvariable) are the tag-naming conventions that i use for text-color and for background-color.
A <p> with dark background is <varbg-colorname><p> which could make a dark area inside a light-colored theme. It's best not to combine color-tags with other tags like <p-colorname>, but to always use them "stand-alone", that way the color(tag) will be available where-ever you need it.
Some tags, I believe, should be standard tags, I name these tags like: <card-tag> and <error-tag>. An important one in this category is <center-tag>, which brings back the old <center>-tag. This had been removed because it was said that it's only purpose was styling and it had no semantic meaning, but I do not agree:

a standalone, centered block of text dóes have semantic meaning:
it stands out between the other text-blocks for some reason
because it nééds to stand out
.

We can now use <strong> and <em> for example, but those are inline elements. What if you need a block of text to stand out? Is it a section? An article? None of them will do.
So people keep on using <div> because there's just no good alternative. <center> was a clear way to add importance to a whole block (like a poem or a receipe), being inside an article, a section, or stand-alone. Ignoring the semantic meaning of this tag was an error and that's why we now have <div>-soup and not many usage of <article>, <section> etc.

The standard shoots itself in the foot, by not offering enough flexibility.

Imagine: I am writing an article and pretending to be a person, like a novel in the "he"-form (third-person singular), I can then make occasional comments as an all-seeing eye, for example <note-from-me>Let's keep our heads cool</note-from-me>. Everyone can then create personalized tags like: <manifest-john-doe> and <receipe-grandma-mary> and <tip-handy-mike> etc. but also <my-personal-advice> or <hear-me-out> or <shut-your-mouth-and-read-my-lips>, that freedom should remain and should also be encouraged.
Bonus: It is also possible to use emoticons within the tags like the following extreme example: <ha-ha-ha-😂-😂-😂>I am rolling on the floor laughing</ha-ha-ha-😂-😂-😂> (The validator will complain something about XML, but who cares? It still validates and: who writes XML these days anyway?)
HTDML gives you as a website-designer the power to do anything you want without breaking anything somewhere else.
Question: How does HTDML do that?
Answer: HTDML provides some custom-tag-containers that isolate all your other tags from the rest of your websites. Take the <card-tag>: if you design your CSS like: card-tag article { then you can go crazy on that article in your styling without breaking any other <article> somewhere else on your websites, it acts like a docker-container keeping all it's goodies inside.
Most of us know the codesnippets on the internet, which are being published within a <code>-block. It serves to demonstrate the exact code which is being used to achieve some function or to parse some sort of output.
There's a simular tag: <samp>, which can be used for the output of that code. But: this is an inline-tag, it does not permit block-level elements inside, they will not validate. Giving it a display: block; in the CSS does not make it valid HTML5.
Enter <samp-block>: this has all the same properties as <samp> but it is a block-level element, which makes it possible to give sample-outputs of block-level elements.
A custom HTDML-tag like <samp-block> is the only way to achieve this without overcomplicating things ánd at the same time give it a highly semantic value.

Bonuses

The CSS of a custom-tag
will not be over-written by other style-rules
because of the higher specifity they have
in relation to CSS-classes

Every custom-tag increases your website's performance
by approximately:  3%❗ per tag.

So if you have many CSS-classes on one page and replace them with custom-tags
it'll bring a significant speed-gain


 

Why am I doing this?

I make websites since 1998 and at the moment of writing this text (may 2025), I have 446 of them and still 0 cookies. I have seen many things come and go and believe to know which changes have been for the good and which not.

I use HTDML in all of my websites (I am still busy refactoring them) and I strongly believe that it can be a solution for many other people, that's why I want to share this. If you like it and want to use it: feel free to do so, if you don't: then don't. I use HTDML more and more and it helps keeping my websites valid HTML5 and Lighthouse (close to) 4 x 100%. I wouldn't be able to keep my 446 websites alive without HTML5 / HTDML, PHP and CSS and I strongly believe that the three together could be very helpful for other people / webdevelopers too, that's why I share it: it brings dynamics, simplicity, flexibility and fun. Forget 🤮 JaVaScRiPt 🤪, that'll only make your life miserable.   About the so-called best practises: Best practises aren't best practises, they're just what everybody else does. Using 'unsafe-inline' in your CSP is best practise? Relying on third-party dependancies without knowing the exact source-code is best-practise? Executing potentially harmful 🤮 JaVaScRiPt 🤪 on your visitors' machines is best practise? Who are you kidding?
 

Social & Donate

Find me on Bluesky Find me on Wordpress Find me on Reddit Find me on Quora Donate to me conveniently and safely using paypal.me
 

Conclusions

HTDML is designed to give back the Web to the people, as it was promised to be. It is a set of tools and propositions to bring people, webdevelopers and companies together, to create a paradigm for the new web-standard, where privacy, authenticity, inclusivity and freedom are its most important goals. It aims to motivate people to start making their own (free or cheap) websites again and reshape the internet by doing so, in a way that it's accessible and understandable by everyone, including fresh-starting webdevelopers, disabled people and companies.

HTDML does not want to be dogmatic, see it as a proposition of online "custom-courtesy".

HTDML is valid HTML5, not valid usage will not be supported and adviced.

HTDML dóes try to be as SEO-friendly as possible, but only for accessibility and user-friendlyness, nót to please search-engines and not to achieve high-search rankings, those reasons are not important within the HTDML-philosophy.

HTDML wants to be all-inclusive and uses selfdocumenting tags for maximum visibility by screenreaders. Some browsers (like Firefox) do not explicitly follow the guidelines in the Whatwg-specifications, if you use this kind of browser or if you deliberately use a very old version of some browser, you will find that HTDML does not provide fall-backs for that, because HTDML is fully conforming to the whatwg-standards and does not accept "interpretations", because a standard is a standard and a standard should give no room for interpretations. Nowadays everyone can use a modern browser without any costs, they are easy to install, if you choose to not do so, then that's an autonomous decision on your part, HTDML does not have to adapt itself to your specific choices. If yóu want to do that: go ahead, but HTDML will not offer any support for it.

The HTDML-tags in the tag-table are all tags conforming to the elements-list in the whatwg-standards plus a few more: https://html.spec.whatwg.org/multipage/#toc-semantics. Tags with the type "Custom" are used for custom-purposes: for the functionality of my websites and only to be seen as a proposition or free-advice, you are ofcourse free to use them, if you wish to do so. These custom-tags are mentioned in the tag-table just to give you an idea of what is possible with HTDML. If you want to see all custom-tags that I use for functionality, you can have a look at the custom-tag-table.

All tags in the tag-table are made to be a hyperlink to a lexicon-page subsection (work in progress), which will give additional information about that specific tag. All standard tags have browser-added specific stylings, you can open dev-tools / inspection-tools and look on the elements-tab to see the "user agent stylesheet" of that specific tag, after selecting it.

HTDML does not use JavaScript, so it does not register tags and that works perfectly fine. As HTDML uses the KSS-principle (Keep it Stupid Simple) it does not want to complicate anything and: have a look around, does it work or doesn't it?
Open inspection-tool and click the performance-tab or do a Lighthouse-test, see for yourself how it works like a breeze.

 

Why we must take back the web

Straight answer:
because it was stolen from us, us the people.

Who stole it from us and why?

Big Tech did it, reason: money.

How did they do it?

To start with: SEO (Search Engine optimalisation)
In the beginning of the web, search engines just crawled the web and tried to match your search as good as they could, because the better results you get, the more likely you will come back to that search engine to look for more.

But their crawlers had trouble indexing the many non-standard (written by none-professionals) websites, so they invented rules: you can't do this and you have to do that and if you don't, your website will be on the bottom of the search results.

So companies dove into the SEO-thing and it was rewarded: all the nice personal pages dropped to the bottom and corporate-pages raised to the top of the search results and that became even worse: the more advertisements and tracking-cookies etc. you added to your website, the higher it came in the search rankings, because that´s where the money comes from: your data, your personal things. The more they know about you, the more you're worth on the market where you are being sold like cattle.

And now, look at the internet: it's all advertisements, content delivery networks, analytics tools tracking you down etc. Whenever you go to a website you have to wait to be verified as human, then you have to click the cookie-consent button and then you have to get rid of the advertisements blocking your view. And if you're finally done then what do you get? False information and boring websites that basically all look the same.

The web is not designed for people anymore, the fun is gone and all you're good for is your personal data. You're not a visitor, not even a user: you're pray for the wolves and they don't give a thing about you personally.

And thát's why we must take back the web,
because it was promised to us,
to us the people.
Our society is run by a managerial bureaucracy,
by professional politicians;

people are motivated by mass suggestion,

their aim is producing more and consuming more,
as purposes in themselves.

Erich Fromm, The Art of Loving

Not an advertisement, but looks like it

(Not an advertisement)  Test your website HTDML-coding Troje (NL) Kahlil Gibran
 

And now for something completely different:

IfastNet cheap hosting & VPS. ✨ infinityfree.com: free webhosting & 3 subdomains ✨

Infinityfree: real free and awesome webhosting


Already: 59 visitors  
NovaCloud-hosting.com ✨ Extremely fast and cheap VPS and Gaming-hosting solutions ✨

NovaCloud-hosting: dó check them out, you won't regret