为什么当浏览器缩小时 div 会重叠,即使我以百分比设置宽度?

Why divs are overlapping when browser is shrinked even when i set widths in percentage?

我 div 将屏幕分成两个 div 宽度分别为 40% 和 59%,但每当我缩小浏览器时,第二个 div 会与第一个 [=25] 重叠=].我哪里错了?

#watch-container{
    width: 40%;
    height: 100vh;
    display: inline-block;
}
#watch-container .watch-skin{
    height: 60%;
    margin-left: 170px;
    margin-top: 110px;
}

#desc-container{
    width: 59%;
    height: 100vh;
    font-family: 'Montserrat', sans-serif;
    display: inline-block;
    vertical-align: top;
}

#content-wrapper{
    width: 100%;
}

你可以运行下面的代码,或者看看codepen - https://codepen.io/tsiruot/pen/GRZMqZY

*{
    margin:0;
    padding:0;
    box-sizing: border-box;
}

nav{
    background-color: #233D53;
    height: 60px;
}

nav #logo{
    height: 40px;
    margin-left: 45px;
    margin-top: 10px;
}

#watch-container{
    width: 40%;
    height: 100vh;
    display: inline-block;
}
#watch-container .watch-skin{
    height: 60%;
    margin-left: 170px;
    margin-top: 110px;
}

#desc-container{
    width: 59%;
    height: 100vh;
    font-family: 'Montserrat', sans-serif;
    display: inline-block;
    vertical-align: top;
}

#content-wrapper{
    width: 100%;
}

#desc-container h1{
    padding-top: 140px;
    margin-bottom: 20px;
    font-size: 40px;
    font-weight: 1000;
}
#color-header{
    font-size: 18px;
    
}
#desc-container p:nth-child(2){
    padding-bottom: 10px;
    width: 70%;
    font-weight: 500;
}
#desc-container h3{
    padding-bottom: 10px;
}

#color-container button{
    height: 33px;
    width: 45px;
    margin-top: 10px;
    margin-right: 10px;
    cursor: pointer;
    border-radius: 4px;
    border: none;
    outline: none;
}
#color-container button:nth-child(1){
    background-color:#23211f ;
}
#color-container button:nth-child(2){
    background-color: #ca3d22;
}
#color-container button:nth-child(3){
    background-color: #565681;
}
#color-container button:nth-child(4){
    background-color: #8a5362;
}

#desc-container > button:last-child{
    margin-top: 25px;
    background-color: rgb(255, 153, 0);
    width: 120px;
    height: 40px;
    outline: none;
    border-radius: 5px;
    border: 1px solid rgb(218, 131, 0);
    cursor: pointer;
    font-family: 'Montserrat', sans-serif;
    color: black;
    font-weight: 700;
}

#desc-container > button:nth-last-child(3)
{
    width: 100px;
    cursor: pointer;
    height: 30px;
    margin-left: 10px;
    border-radius: 4px;
    background-color: rgb(221, 221, 221);
    outline: none;
    border: none;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
}
#desc-container > button:nth-last-child(4)
{
    width: 60px;
    height: 30px;
    border-radius: 4px;
    background-color: rgb(221, 221, 221);
    cursor: pointer;
    outline: none;
    border: none;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
}
<header>
        <nav>
            <img id="logo" src="amazon-img.png" alt="Amazon-logo" />
        </nav>
    </header>
    <section>
        <div id="content-wrapper">
        <div id="watch-container">
            <img class="watch-skin" src="https://i.imgur.com/iOeUBV7.png" alt="Black-strap" />
        </div>
        <div id="desc-container">
            <h1>FitBit 20 - The Smartest Watch</h1>
            <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit.
                 Asperiores nisi quae dolorem eaque porro itaque architecto et dolores dolorum natus.</p>
            <br />
            <p id="color-header"><b>Select Color</b></p>
            <div id="color-container">
                <button class="color"></button>
                <button class="color"></button>
                <button class="color"></button>
                <button class="color"></button>
            </div>   
            <br />
            <h3>Features</h3> 
            <button >Time</button>
            <button >Heart Rate</button>
            <br />
            <button>BUY NOW</button>
         </div>
        </div> 
    </section>

实际上 div 并没有重叠。 #watch-container .watch-skin 中的图像包含 170pxmargin-left 这会导致图像移出其容器 删除该值,您的屏幕将按预期工作。

#watch-container .watch-skin{
    height: 60%;
    /* Remove this one */
    /* margin-left: 170px; */
    margin-top: 110px;
}

如果您有兴趣,可以在 css 中进行 display: flex 实施。只有你需要改变的是下面提到的那个。

#content-wrapper {
  width: 100%;
  display: flex;
}

#watch-container .watch-skin {
  height: 60%;
  margin-left: auto;
  margin-top: 110px;
}

这将根据您可用的 space 图片自动 marin-left

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

nav {
  background-color: #233D53;
  height: 60px;
}

nav #logo {
  height: 40px;
  margin-left: 45px;
  margin-top: 10px;
}

#watch-container {
  width: 40%;
  height: 100vh;
  display: flex;  
}

#watch-container .watch-skin {
  height: 60%;
  margin-left: auto;
  margin-top: 110px;
}

#desc-container {
  width: 59%;
  height: 100vh;
  font-family: 'Montserrat', sans-serif;
  display: inline-block;
  vertical-align: top;
}

#content-wrapper {
  width: 100%;
  display: flex;
}

#desc-container h1 {
  padding-top: 140px;
  margin-bottom: 20px;
  font-size: 40px;
  font-weight: 1000;
}

#color-header {
  font-size: 18px;

}

#desc-container p:nth-child(2) {
  padding-bottom: 10px;
  width: 70%;
  font-weight: 500;
}

#desc-container h3 {
  padding-bottom: 10px;
}

#color-container button {
  height: 33px;
  width: 45px;
  margin-top: 10px;
  margin-right: 10px;
  cursor: pointer;
  border-radius: 4px;
  border: none;
  outline: none;
}

#color-container button:nth-child(1) {
  background-color: #23211f;
}

#color-container button:nth-child(2) {
  background-color: #ca3d22;
}

#color-container button:nth-child(3) {
  background-color: #565681;
}

#color-container button:nth-child(4) {
  background-color: #8a5362;
}

#desc-container>button:last-child {
  margin-top: 25px;
  background-color: rgb(255, 153, 0);
  width: 120px;
  height: 40px;
  outline: none;
  border-radius: 5px;
  border: 1px solid rgb(218, 131, 0);
  cursor: pointer;
  font-family: 'Montserrat', sans-serif;
  color: black;
  font-weight: 700;
}

#desc-container>button:nth-last-child(3) {
  width: 100px;
  cursor: pointer;
  height: 30px;
  margin-left: 10px;
  border-radius: 4px;
  background-color: rgb(221, 221, 221);
  outline: none;
  border: none;
  font-family: 'Montserrat', sans-serif;
  font-weight: 700;
}

#desc-container>button:nth-last-child(4) {
  width: 60px;
  height: 30px;
  border-radius: 4px;
  background-color: rgb(221, 221, 221);
  cursor: pointer;
  outline: none;
  border: none;
  font-family: 'Montserrat', sans-serif;
  font-weight: 700;
}
<header>
  <nav>
    <img id="logo" src="amazon-img.png" alt="Amazon-logo" />
  </nav>
</header>
<section>
  <div id="content-wrapper">
    <div id="watch-container">
      <img class="watch-skin" src="https://i.imgur.com/iOeUBV7.png" alt="Black-strap" />
    </div>
    <div id="desc-container">
      <h1>FitBit 20 - The Smartest Watch</h1>
      <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit.
        Asperiores nisi quae dolorem eaque porro itaque architecto et dolores dolorum natus.</p>
      <br />
      <p id="color-header"><b>Select Color</b></p>
      <div id="color-container">
        <button class="color"></button>
        <button class="color"></button>
        <button class="color"></button>
        <button class="color"></button>
      </div>
      <br />
      <h3>Features</h3>
      <button>Time</button>
      <button>Heart Rate</button>
      <br />
      <button>BUY NOW</button>
    </div>
  </div>
</section>

您已将容器设置为百分比宽度,但 'watch-container' div 的内容没有响应,因此随着容器变小它会溢出容器。

这是您正在使用的:

#watch-container .watch-skin{
    height: 60%;
    margin-left: 170px;
    margin-top: 110px;
}

无论容器大小,图片宽度和左边距之间的内容都超过 500px。

您需要删除边距(如果需要,请使用 margin:auto 使图像居中)。您还需要根据 width 而不是 height:

使图像响应
#watch-container .watch-skin{
    width: 100%;
    margin: auto;
    margin-top: 110px;
}

工作示例:这是您的工作代码,其中包含 #watch-container 的响应式内容 - 请注意,当图像必须适合 40% 时,它会变得非常小的屏幕。如果您没有图中手表周围的白色 space,这将有所帮助:

*{
    margin:0;
    padding:0;
    box-sizing: border-box;
}

nav{
    background-color: #233D53;
    height: 60px;
}

nav #logo{
    height: 40px;
    margin-left: 45px;
    margin-top: 10px;
}

#watch-container{
    width: 40%;
    height: 100vh;
    display: inline-block;
}
#watch-container .watch-skin{
    width: 100%;
    margin: auto;
    margin-top: 110px;
}

#desc-container{
    width: 59%;
    height: 100vh;
    font-family: 'Montserrat', sans-serif;
    display: inline-block;
    vertical-align: top;
}

#content-wrapper{
    width: 100%;
}

#desc-container h1{
    padding-top: 140px;
    margin-bottom: 20px;
    font-size: 40px;
    font-weight: 1000;
}
#color-header{
    font-size: 18px;
    
}
#desc-container p:nth-child(2){
    padding-bottom: 10px;
    width: 70%;
    font-weight: 500;
}
#desc-container h3{
    padding-bottom: 10px;
}

#color-container button{
    height: 33px;
    width: 45px;
    margin-top: 10px;
    margin-right: 10px;
    cursor: pointer;
    border-radius: 4px;
    border: none;
    outline: none;
}
#color-container button:nth-child(1){
    background-color:#23211f ;
}
#color-container button:nth-child(2){
    background-color: #ca3d22;
}
#color-container button:nth-child(3){
    background-color: #565681;
}
#color-container button:nth-child(4){
    background-color: #8a5362;
}

#desc-container > button:last-child{
    margin-top: 25px;
    background-color: rgb(255, 153, 0);
    width: 120px;
    height: 40px;
    outline: none;
    border-radius: 5px;
    border: 1px solid rgb(218, 131, 0);
    cursor: pointer;
    font-family: 'Montserrat', sans-serif;
    color: black;
    font-weight: 700;
}

#desc-container > button:nth-last-child(3)
{
    width: 100px;
    cursor: pointer;
    height: 30px;
    margin-left: 10px;
    border-radius: 4px;
    background-color: rgb(221, 221, 221);
    outline: none;
    border: none;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
}
#desc-container > button:nth-last-child(4)
{
    width: 60px;
    height: 30px;
    border-radius: 4px;
    background-color: rgb(221, 221, 221);
    cursor: pointer;
    outline: none;
    border: none;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
}
<header>
        <nav>
            <img id="logo" src="amazon-img.png" alt="Amazon-logo" />
        </nav>
    </header>
    <section>
        <div id="content-wrapper">
        <div id="watch-container">
            <img class="watch-skin" src="https://i.imgur.com/iOeUBV7.png" alt="Black-strap" />
        </div>
        <div id="desc-container">
            <h1>FitBit 20 - The Smartest Watch</h1>
            <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit.
                 Asperiores nisi quae dolorem eaque porro itaque architecto et dolores dolorum natus.</p>
            <br />
            <p id="color-header"><b>Select Color</b></p>
            <div id="color-container">
                <button class="color"></button>
                <button class="color"></button>
                <button class="color"></button>
                <button class="color"></button>
            </div>   
            <br />
            <h3>Features</h3> 
            <button >Time</button>
            <button >Heart Rate</button>
            <br />
            <button>BUY NOW</button>
         </div>
        </div> 
    </section>

我看到 code.html 结构很好,但 CSS 属性有些问题。如果你想要左图在左框的中心,你可以应用下面的代码来解决你在所有屏幕上的问题。

#watch-container .watch-skin{
    height: 60%;
    margin-left: auto;
    margin-right:auto;
    display:block;
    margin-top: 110px;
}

不是一个花哨的答案,但问题 is/are 他们 height: 100vh; 删除了他们。而是使用

..... {
  height:100%;
  min-height:100vh;
}