当前位置: 首页 > 面试题库 >

CSS输入的宽度:100%超出了父级的界限

刘选
2023-03-14
问题内容

我试图制作一个由两个输入字段组成的登录表单,并带有插入填充,但是这两个字段总是最终超出其父级的边界。该问题源于添加的 插图
填充。为了解决这个问题可以采取什么措施?

注意:该代码可能不是最干净的。例如,可能根本不需要封装文本输入的span元素。

    #mainContainer {

        line-height: 20px;

        font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;

        background-color: rgba(0,50,94,0.2);

        margin: 20px auto;

        display: table;

        -moz-border-radius: 15px;

        border-style: solid;

        border-color: rgb(40, 40, 40);

        border-radius: 2px 5px 2px 5px / 5px 2px 5px 2px;

        border-radius: 2px;

        border-radius: 2px 5px / 5px;

        box-shadow: 0 5px 10px 5px rgba(0,0,0,0.2);

    }



    .loginForm {

        width: 320px;

        height: 250px;

        padding: 10px 15px 25px 15px;

        overflow: hidden;

    }



    .login-fields > .login-bottom input#login-button_normal {

        float: right;

        padding: 2px 25px;

        cursor: pointer;

        margin-left: 10px;

    }



    .login-fields > .login-bottom input#login-remember {

        float: left;

        margin-right: 3px;

    }



    .spacer {

        padding-bottom: 10px;

    }



    /* ELEMENT OF INTEREST HERE! */

    input[type=text],

    input[type=password] {

        width: 100%;

        height: 20px;

        padding: 5px 10px;

        background-color: rgb(215, 215, 215);

        line-height: 20px;

        font-size: 12px;

        color: rgb(136, 136, 136);

        border-radius: 2px 2px 2px 2px;

        border: 1px solid rgb(114, 114, 114);

        box-shadow: 0 1px 0 rgba(24, 24, 24,0.1);

    }



    input[type=text]:hover,

    input[type=password]:hover,

    label:hover ~ input[type=text],

    label:hover ~ input[type=password] {

        background:rgb(242, 242, 242) !important;

    }



    input[type=submit]:hover {

      box-shadow:

        inset 0 1px 0 rgba(255,255,255,0.3),

        inset 0 -10px 10px rgba(255,255,255,0.1);

    }


    <div id="mainContainer">

        <div id="login" class="loginForm">

            <div class="login-top">

            </div>

            <form class="login-fields" onsubmit="alert('test'); return false;">

                <div id="login-email" class="login-field">

                    <label for="email" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">E-mail address</label>

                    <span><input name="email" id="email" type="text"></input></span>

                </div>

                <div class="spacer"></div>

                <div id="login-password" class="login-field">

                    <label for="password" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Password</label>

                    <span><input name="password" id="password" type="password"></input></span>

                </div>

                <div class="login-bottom">

                    <input type="checkbox" name="remember" id="login-remember"></input>

                    <label for="login-remember" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Remember my email</label>

                    <input type="submit" name="login-button" id="login-button_normal" style="cursor: pointer" value="Log in"></input>

                </div>

            </form>

        </div>

    </div>

问题答案:

使用CSS定义box-sizing:border-box可防止填充影响元素的宽度或高度。请参阅的文档box-sizing。您可能还需要检查(IE8 +)的浏览器兼容性box-sizing

border-box
:width和height属性包括padding和border,但不包括margin…。请注意padding和border将在盒子内部。

input[type=text],
input[type=password] {
    box-sizing : border-box;
}

编辑:在进行此编辑时,不需要前缀box-sizing

#mainContainer {

  line-height: 20px;

  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;

  background-color: rgba(0, 50, 94, 0.2);

  margin: 20px auto;

  display: table;

  -moz-border-radius: 15px;

  border-style: solid;

  border-color: rgb(40, 40, 40);

  border-radius: 2px 5px 2px 5px / 5px 2px 5px 2px;

  border-radius: 2px;

  border-radius: 2px 5px / 5px;

  box-shadow: 0 5px 10px 5px rgba(0, 0, 0, 0.2);

}

.loginForm {

  width: 320px;

  height: 250px;

  padding: 10px 15px 25px 15px;

  overflow: hidden;

}

.login-fields > .login-bottom input#login-button_normal {

  float: right;

  padding: 2px 25px;

  cursor: pointer;

  margin-left: 10px;

}

.login-fields > .login-bottom input#login-remember {

  float: left;

  margin-right: 3px;

}

.spacer {

  padding-bottom: 10px;

}

input[type=text],

input[type=password] {

  width: 100%;

  height: 30px;

  padding: 5px 10px;

  background-color: rgb(215, 215, 215);

  line-height: 20px;

  font-size: 12px;

  color: rgb(136, 136, 136);

  border-radius: 2px 2px 2px 2px;

  border: 1px solid rgb(114, 114, 114);

  box-shadow: 0 1px 0 rgba(24, 24, 24, 0.1);

  box-sizing: border-box;

}

input[type=text]:hover,

input[type=password]:hover,

label:hover ~ input[type=text],

label:hover ~ input[type=password] {

  background: rgb(242, 242, 242);

  !important;

}

input[type=submit]:hover {

  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), inset 0 -10px 10px rgba(255, 255, 255, 0.1);

}

.login-top {

  height: auto;/*85px;*/

}

.login-bottom {

  padding: 35px 15px 0 0;

}


<div id="mainContainer">

  <div id="login" class="loginForm">

    <div class="login-top">

    </div>

    <form class="login-fields" onsubmit="alert('test'); return false;">

      <div id="login-email" class="login-field">

        <label for="email" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">E-mail address</label>

        <span><input name="email" id="email" type="text" /></span>

      </div>

      <div class="spacer"></div>

      <div id="login-password" class="login-field">

        <label for="password" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Password</label>

        <span><input name="password" id="password" type="password" /></span>

      </div>

      <div class="login-bottom">

        <input type="checkbox" name="remember" id="login-remember" />

        <label for="login-remember" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Remember my email</label>

        <input type="submit" name="login-button" id="login-button_normal" style="cursor: pointer" value="Log in" />

      </div>

    </form>

  </div>

</div>

或者,不对<input>元素本身添加填充,而是对<span>包装输入的元素进行样式设置。这样,<input>可以将元素设置为width:100%,而不受任何其他填充的影响。下面的例子:

#login-form {

  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;

  background-color: rgba(0, 50, 94, 0.2);

  margin: 20px auto;

  padding: 10px 15px 25px 15px;

  border: 4px solid rgb(40, 40, 40);

  box-shadow: 0 5px 10px 5px rgba(0, 0, 0, 0.2);

  border-radius: 2px;

  width: 320px;

}

label span {

  display: block;

  padding: .3em 1em;

  background-color: rgb(215, 215, 215);

  border-radius: .25em;

  border: 1px solid rgb(114, 114, 114);

  box-shadow: 0 1px 0 rgba(24, 24, 24, 0.1);

  margin: 0 0 1em;

}

label span:hover {

  background: rgb(242, 242, 242);

  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), inset 0 -10px 10px rgba(255, 255, 255, 0.1);

}

input[type=text],

input[type=password] {

  background: none;

  border: none;

  width: 100%;

  height: 2em;

  line-height: 2em;

  font-size: 12px;

  color: rgb(136, 136, 136);

  outline: none;

}

.login-bottom {

  margin: 2em 1em 0 0;

}

input#login-button {

  float: right;

  padding: 2px 25px;

}

input#login-remember {

  float: left;

  margin-right: 3px;

}


<form id="login-form">

  <label>E-mail address

    <span><input name="email" type="text" /></span>

  </label>

  <label>Password

    <span><input name="password" type="password" /></span>

  </label>

  <div class="login-bottom">

    <label>

      <input type="checkbox" name="remember" id="login-remember" />Remember my email

    </label>

    <input type="submit" name="login-button" id="login-button" value="Log in" />

  </div>

</form>


 类似资料:
  • 在鼠标悬停时,我想变换两个相邻的flex元素的位置,如下图所示 标记如下 我希望两个元素都是父元素的100%宽度,第二个元素溢出,这样我就可以在鼠标悬停时变换X。我遇到的问题是两个元素都被挤压到容器中。 我知道我可以在另一个div中包装这两个元素,并给它200%的容器宽度。但想知道这能不能用Flexbox完成

  • 我试图理解我的意外行为: 容器中有一个最大高度为100%的元素,该容器也使用了最大高度,但意外的是,子元素溢出了父元素: 测试用例:http://jsfiddle.net/bq4Wu/16/ 但是,如果为父级指定了明确的高度,则这是固定的: 测试用例:http://jsfiddle.net/bq4Wu/17/ 有人知道第一个例子中孩子为什么不尊重父母的最大身高吗?为什么需要明确的高度?

  • 我有一个基于CssLayout的视图,它有一个预定义的最小宽度,但可以扩展以填充整个屏幕。这个视图,我们称之为父视图,在列表视图中有子视图。每个子级都是扩展HorizontalLayout的同一类的实例。 我有几个布局问题。 首先,由于封装垂直布局为每个孩子提供了一定百分比的空间,而不是允许他们根据自己的高度适当地分配空间,因此孩子们彼此重叠。VerticalLayout是必需的,因为当列表大于父

  • 问题内容: 目前,通过STYLE,我可以在和高度上使用和,反之亦然,但是我仍然不能将图像分别限制在一个特定的位置,无论是太宽还是太高。 有任何想法吗? 问题答案: 如果仅在图像上定义一维,则将始终保留图像长宽比。 图像是否比您喜欢的更大/更佳? 您可以将其放入DIV中,该DIV设置为图像所需的最大高度/宽度,然后设置“ overflow:hidden”。那将收获超出您想要的任何东西。 如果图像的宽

  • 问题内容: 我正在尝试使图像(动态放置,不受尺寸限制)的宽度与其父div一样宽,但前提是该宽度不比其自身的宽度100%宽。我已经尝试过,但无济于事: 这些图像中的许多图像都比其父div宽得多,这就是为什么我希望它们进行相应调整的原因,但是当其中弹出一个小图像并放大到超出其正常尺寸时,它看起来确实很糟糕。有什么办法吗? 问题答案: 仅指定一个,就应该这样做。

  • 我不明白为什么会发生这个错误。m1.length和m1[0].length打印行和列的正确长度。我给出了以下投入: 然后发生了错误