ynthrepic
ynthrepic

Reputation: 171

Unable to get ReCaptcha to position cleanly next to another element

For some reason I can't work out, when I add the ReCaptcha snippet to my site, it causes mysterious padding to be added which prevents the Captcha div and the div to its left from aligning properly. If I remove the Captcha and replace it with, say, an image or text, there is no problem.

How I expect the layout to work:

enter image description here

How it looks with the Captcha:

enter image description here

.inputs {
  display: table;
  width: 100%;
  box-sizing: border-box;
  text-align: center;
  border-radius: 1em;
  padding: 0.5em 0.5em 1em 0.5em;
  margin-bottom: 1em;
  background-color: #e9e9e9;
}
.inputs>div {
  display: table-row;
}
.inputs>div>div {
  display: table-cell;
  padding: 0 0.5em 0 0.5em;
  text-align: left;
}
.inputs .captcha {
  box-sizing: border-box;
  padding-top: 0.5em;
  width: 164px;
  height: 100%;
  overflow: hidden;
}
.inputs span {
  font-size: 0.75em;
  font-weight: bold;
}
.inputs input {
  box-sizing: border-box;
  width: 100%;
  text-indent: 0.2em;
}
.inputs select {
  box-sizing: border-box;
  width: 100%;
}
<script src='https://www.google.com/recaptcha/api.js'></script>

<div class="inputs">
  <div>
    <div>
      <span>topic</span>
      <br>
      <select name="subject">
        <option value="general">General Enquiry</option>
        <option value="request-booking">Request a Booking</option>
        <option value="change-booking">Change a Booking</option>
        <option value="feedback">Give Feedback</option>
      </select>
      <br>
      <br>
      <span>subject</span>
      <br>
      <input type="text" name="subject" size="255">
      <br>
      <br>
    </div>
    <div class="captcha">
      Hello, I'm a Captcha. I should be here, next to my friends 'Topic', and 'Subject'. But I like to be superior to them and float above!

    </div>
  </div>
</div>

<div class="inputs">
  <div>
    <div>
      <span>topic</span>
      <br>
      <select name="subject">
        <option value="general">General Enquiry</option>
        <option value="request-booking">Request a Booking</option>
        <option value="change-booking">Change a Booking</option>
        <option value="feedback">Give Feedback</option>
      </select>
      <br>
      <br>
      <span>subject</span>
      <br>
      <input type="text" name="subject" size="255">
      <br>
      <br>
    </div>
    <div class="captcha">
      <div class="g-recaptcha" data-size="compact" data-sitekey="6LcU-SYTAAAAANenob4MJ24ZURnm8Q4OAmbuY3FW"></div>
    </div>
  </div>
</div>

Any ideas much appreciated!

Upvotes: 3

Views: 729

Answers (2)

Mosh Feu
Mosh Feu

Reputation: 29287

The key is to set vertical-align:top; to "column".

.inputs {
  display: table;
  width: 100%;
  box-sizing: border-box;
  text-align: center;
  border-radius: 1em;
  padding: 0.5em 0.5em 1em 0.5em;
  margin-bottom: 1em;
  background-color: #e9e9e9;
}
.inputs>div {
  display: table-row;
}
.inputs>div>div {
  display: table-cell;
  padding: 0 0.5em 0 0.5em;
  text-align: left;
  vertical-align:top;
}
.inputs .captcha {
  box-sizing: border-box;
  padding-top: 0.5em;
  width: 164px;
  height: 100%;
  overflow: hidden;
}
.inputs span {
  font-size: 0.75em;
  font-weight: bold;
}
.inputs input {
  box-sizing: border-box;
  width: 100%;
  text-indent: 0.2em;
}
.inputs select {
  box-sizing: border-box;
  width: 100%;
}
<script src='https://www.google.com/recaptcha/api.js'></script>

<div class="inputs">
  <div>
    <div>
      <span>topic</span>
      <br>
      <select name="subject">
        <option value="general">General Enquiry</option>
        <option value="request-booking">Request a Booking</option>
        <option value="change-booking">Change a Booking</option>
        <option value="feedback">Give Feedback</option>
      </select>
      <br>
      <br>
      <span>subject</span>
      <br>
      <input type="text" name="subject" size="255">
      <br>
      <br>
    </div>
    <div class="captcha">
      Hello, I'm a Captcha. I should be here, next to my friends 'Topic', and 'Subject'. But I like to be superior to them and float above!

    </div>
  </div>
</div>

<div class="inputs">
  <div>
    <div>
      <span>topic</span>
      <br>
      <select name="subject">
        <option value="general">General Enquiry</option>
        <option value="request-booking">Request a Booking</option>
        <option value="change-booking">Change a Booking</option>
        <option value="feedback">Give Feedback</option>
      </select>
      <br>
      <br>
      <span>subject</span>
      <br>
      <input type="text" name="subject" size="255">
      <br>
      <br>
    </div>
    <div class="captcha">
      <div class="g-recaptcha" data-size="compact" data-sitekey="6LcU-SYTAAAAANenob4MJ24ZURnm8Q4OAmbuY3FW"></div>
    </div>
  </div>
</div>

Upvotes: 1

Saurabh Katiyar
Saurabh Katiyar

Reputation: 49

You should be using float property here to align items. Please make the below changes in your css and see if it works as you expected.

.inputs>div>div {
    display: table-cell;
    padding: 0 0.5em 0 0.5em;
    text-align: left;
    float: left;
    width: 80%;
}
.inputs .captcha {
    box-sizing: border-box;
    padding-top: 0.5em;
    width: 18%;
    height: 100%;
    float: right;
    overflow: hidden;
}

Hope this helps.

Upvotes: 0

Related Questions