Contact Form

  1. Demo
  2. Docu
  3. Full Screen ↗
  • Documentation
  • HTML code
  • Configuration
  • Contact Form Component

    What it does

    Documents the Joomla com_contact email form markup using design system classes. The actual form is rendered by PHP (default_form.php template override); this Nunjucks component mirrors that markup for design system documentation.

    Form structure

    <form class="contact-form form-validate" novalidate>
      <fieldset class="contact-form__fields flow">
        <div class="control-group">
          <label class="control-label required" for="contact_name">Name *</label>
          <div class="controls">
            <input class="form-control required" type="text"  />
          </div>
        </div>
        <!-- … more fields … -->
      </fieldset>
      <div class="contact-form__submit">
        <button class="btn btn-primary validate" type="submit">Nachricht senden</button>
      </div>
    </form>
    

    Fields

    Field Type Required
    contact_name text Yes
    contact_email email Yes
    contact_subject text Yes
    contact_message textarea Yes
    contact_email_copy checkbox No

    CSS class reference

    Class Element
    .contact-form <form> root
    .contact-form__fields <fieldset> wrapping all fields
    .contact-form__submit Submit button wrapper
    .control-group Row wrapper for each field
    .control-label <label> element
    .controls Input wrapper <div>
    .form-control <input> / <textarea>

    SCSS

    Form base styles live in src/media/templates/site/jcrafts/scss/base/_form.scss. Layout and spacing for .contact-form in scss/components/_contact-info.scss.


    HTML Code (Demo)

    <form class="contact-form form-validate" novalidate>
      <fieldset class="contact-form__fields flow">
        <div class="control-group">
          <label class="control-label required" for="contact_name">
             Name<span class="star" aria-hidden="true"> *</span>
          </label>
          <div class="controls">
            <input class="form-control required" type="text" id="contact_name" name="jform[contact_name]" required autocomplete="name" />
          </div>
        </div>
        <div class="control-group">
          <label class="control-label required" for="contact_email">
             Email<span class="star" aria-hidden="true"> *</span>
          </label>
          <div class="controls">
            <input class="form-control required validate-email" type="email" id="contact_email" name="jform[contact_email]" required autocomplete="email" />
          </div>
        </div>
        <div class="control-group">
          <label class="control-label required" for="contact_subject">
             Subject<span class="star" aria-hidden="true"> *</span>
          </label>
          <div class="controls">
            <input class="form-control required" type="text" id="contact_subject" name="jform[contact_subject]" required />
          </div>
        </div>
        <div class="control-group">
          <label class="control-label required" for="contact_message">
             Message<span class="star" aria-hidden="true"> *</span>
          </label>
          <div class="controls">
            <textarea class="form-control required" id="contact_message" name="jform[contact_message]" rows="6" required></textarea>
          </div>
        </div>
        <div class="control-group">
          <label class="control-label" for="contact_email_copy">
          Send me a copy</label>
          <div class="controls">
            <input class="form-control" type="checkbox" id="contact_email_copy" name="jform[contact_email_copy]" value="1" />
          </div>
        </div>
      </fieldset>
      <div class="contact-form__submit">
        <button class="btn btn-primary validate" type="submit">
        Send message</button>
      </div>
    </form>

    Configuration

    Component Config: Forms/contact-form/contact-form.config.js
    {
      "labelName": "Name",
      "labelEmail": "Email",
      "labelSubject": "Subject",
      "labelMessage": "Message",
      "labelCopy": "Send me a copy",
      "labelSubmit": "Send message"
    }