为啥屏幕宽度低于 300px 时图像尺寸不减小?

Posted

技术标签:

【中文标题】为啥屏幕宽度低于 300px 时图像尺寸不减小?【英文标题】:Why doesn't the image size reduce when the screen width is below 300px?为什么屏幕宽度低于 300px 时图像尺寸不减小? 【发布时间】:2022-01-04 09:39:33 【问题描述】:

我的这个网页在桌面上看起来不错,但无法正确适应移动电话等较小的设备。我什至尝试在 CSS 中对 width 属性使用“clamp”,但无济于事。它仍然会溢出到屏幕的右侧,并且元素不会像应有的那样保持居中。

下面是代码:

:root 
  --main-color: #087830;
  --secondary-color: #e7ffdb;
  --dark-color: #444;
  --light-color: #fafafa


body 
  font-family: Quicksand, sans-serif;
  background: radial-gradient(var(--light-color), var(--light-color), var(--secondary-color));
  background-repeat: no-repeat;
  color: var(--dark-color);
  text-shadow: 0 0 2px var(--light-color);
  margin: 0;
  padding: 0 1em;
  display: grid;
  place-items: center;
  font-size: 20px;
  overflow-x: hidden;
  word-wrap: break-word


a 
  text-decoration: none


input 
  box-sizing: border-box


h1,
h2,
h3,
h4,
h5,
h6 
  font-family: Eczar, serif;
  font-weight: 700;
  margin: 0


h2 
  color: var(--main-color)


section 
  border-bottom: 2px solid #b6fd92;
  width: 100%


.full-height 
  min-height: 100vh


.image-label 
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 0;
  text-shadow: 0 0 20px var(--dark-color)


.cta-button 
  background: var(--main-color);
  color: var(--light-color);
  text-shadow: none;
  border: 2px solid var(--main-color);
  border-radius: 2em;
  padding: 10px 1em;
  font-weight: 700


.cta-button:hover 
  background: var(--light-color);
  color: var(--main-color);
  transition-duration: .4s


.navbar 
  height: 100px;
  width: 100%;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between


.navbar div 
  display: flex;
  align-items: center


.nav-title 
  height: 100%;
  gap: 10px


.navbar img 
  height: 70%


.nav-toggle,
.nav-toggle-label 
  position: fixed;
  right: -100vh;
  top: 0;
  height: 80px;
  width: 110px;
  display: grid;
  grid-auto-flow: column;
  place-items: center;
  opacity: 0;
  color: var(--main-color);
  font-weight: 700


.website-title 
  max-width: 200px


.nav-toggle 
  z-index: 3


.nav-toggle-label 
  z-index: 2


.navbar a 
  text-decoration: none;
  color: var(--dark-color);
  margin: 0 5px;
  border-radius: 1em;
  padding: .5em 15px


.navbar a:hover 
  background: var(--light-color);
  color: var(--main-color);
  box-shadow: 0 0 5px var(--light-color);
  transition-duration: .4s


.hero 
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  padding: 2em;
  gap: 50px


.hero div 
  max-width: 500px


.hero h2 
  font-size: 3em;
  line-height: 1em


.hero img 
  width: 100%


@media screen and (max-width:1020px) 

  .nav-toggle,
  .nav-toggle-label 
    right: 10px;
    top: 10px
  

  .nav-toggle-label 
    opacity: 1
  

  .nav-toggle:checked~.navlinks 
    right: 0;
    transition-duration: .4s
  

  .nav-toggle:checked~.nav-toggle-label 
    color: var(--light-color);
    text-shadow: none
  

  .navlinks 
    position: fixed;
    top: 0;
    right: -200px;
    height: 100vh;
    width: 200px;
    background: var(--main-color);
    display: flex;
    flex-direction: column;
    justify-content: center;
    z-index: 1
  

  .navlinks a 
    color: var(--light-color)
  
<section class="full-height">
  <nav class="navbar">
    <div class="nav-title">
      <img src="logo.svg" >
      <img class="website-title" src="website-title.svg" >
    </div>
    <input type="checkbox" class="nav-toggle">
    <span class="nav-toggle-label">Menu</span>
    <div class="navlinks">
      <a aria-current="page" class="" href="/">Home</a>
      <a aria-current="page" class="" href="/">Link 2</a>
      <a aria-current="page" class="" href="/">Link 3</a>
      <a aria-current="page" class="" href="/">Link 4</a>
      <a aria-current="page" class="" href="/">Login</a>
    </div>
  </nav>
  <div class="hero">
    <div>
      <h2>Catchy Line</h2>
      <p>Description bla bla bla bla bla bla bla bla bla bla bla</p>
      <br>
      <a aria-current="page" class="cta-button" href="/">CTA Button</a>
    </div>
    <div>
      <img src="https://hatrabbits.com/wp-content/uploads/2017/01/random.jpg" >
    </div>
  </div>
</section>

如何让我的代码响应式?

【问题讨论】:

大象图像在我端正确缩放。只有当视口变得非常窄时,内容(标题、按钮等)才会导致父 div“英雄”保持在 263 像素。如果在正文中添加 word-break: break-all,图像会无限缩小。但这可能不是你想做的事情。 【参考方案1】:

要使您的图像“响应式”(意味着它们不会溢出您的屏幕/主体),请尝试在您的图像类中添加 max-width: 95% 之类的内容。

您还可以设置 div 的background-url 并操作您的 div 使其不大于屏幕。

【讨论】:

【参考方案2】:

正如 Sev 所提到的,阻止图像缩小的是其他内容的宽度。我不会为此费心调整它,我认为这些天没有人使用宽度小于 300 像素的手机。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于为啥屏幕宽度低于 300px 时图像尺寸不减小?的主要内容,如果未能解决你的问题,请参考以下文章

在所有屏幕分辨率下,对包含网格的div应用水平滚动。

响应网站;保持图像高度,同时减小宽度?

如何让图像响应屏幕尺寸但不逐渐缩小?

手机屏幕最小宽度480dp过来是多少?

响应式图像裁剪

减小尺寸(掩码图像)。你能帮助我吗?