【问题标题】:CSS : cropping an image makes the text disappearCSS:裁剪图像使文本消失
【发布时间】:2014-10-24 23:54:48
【问题描述】:

我需要一个 100% 宽度的图像,上面有一个菜单和一个表单。

在该区域之后,我将拥有页面主要内容...

为了更好地使图像适应不同的设备,我使用边距和媒体查询“裁剪”左/右或顶部的图像(调整窗口大小以进行检查)。

问题是当我裁剪图像时,例如在顶部,标题内容也会上升并消失。

这是我的 HTML 和 CSS,带有 JSFiddle example

.header {
    position: relative;       
}
div.slider {
    position: relative;
}

img {
    width: 100%;
    outline: 0;
    height: auto;
}
@media screen and (max-width:480px) {
    div.crop {
        margin-left: -12em; 
    }
}
@media screen and (min-width:800px) {
    div.crop {
        margin-top: -4em; 
    }
}
div.header-content {
    position: absolute;
    top: 0;     
}
div.main-content {   
}
<div class="header">    
   <div class="slider">
      <div class="crop">          
         <img class="slide" src="http://placehold.it/800x200"/>
      </div>
   </div>
   <div class="header-content">
      <div class="menu">
         A menu
      </div>
      <div class="form">
         A form
      </div>
   </div>    
</div>
<div class="main-content">
   Main Content
</div>

通过删除“裁剪”部分,一切正常......

这是我的非裁剪版本的 HTML 和 CSS JSFiddle example

.header {
  position: relative;       
}
div.slider {
  position: relative;
}
img {
  width: 100%;
  height: auto;
  outline: 0;
}
div.header-content {
  position: absolute;
  top: 0;     
}
div.main-content { }
<div class="header">
  <div class="slider">
    <img class="slide" src="http://placehold.it/800x200"/>
  </div>
  <div class="header-content">
   <div class="menu">
       A menu
   </div>
   <div class="form">
       A form
    </div>
  </div>    
</div>
<div class="main-content">
  Main Content
</div>

我该如何解决这个问题?

【问题讨论】:

  • margin-top: -4em; 已打开秘密 (;)) 顶部空间,供.header-content 入住! (它不会消失,它只是移动到可用区域。转至-1em 获取图片。)
  • 我知道是边缘顶部使文本消失。我使用 margin-top 是因为我正在裁剪图像以更好地适应更大的屏幕。但是我怎样才能将我的代码更改为仍然能够裁剪图像而不使文本消失。这就是问题所在。
  • 有很多解决方案。只是您ehrmm“裁剪”图像的方式很奇怪。
  • 那么您将如何裁剪图像?我这样做的方式很常见……
  • @RokoC.Buljan 很好地解释了我在做什么:designshack.net/articles/css/…

标签: html css media-queries


【解决方案1】:

这是一种方法。

要裁剪图像,您可以在容器内的图像上使用绝对位置 有overflow: hidden

你需要决定.crop容器的高度,我用vw单位 with 基于视口的宽度,但部分取决于您的布局。

您需要调整您的媒体查询,以便正确的屏幕宽度范围 应用,在某些情况下,您需要同时设置min-widthmax-width 才能获得 逻辑正确。

要放置图像,请调整图像上的偏移量和/或边距。

注意:这种方法非常灵活,确切的细节(偏移量、宽度、边距的值)将取决于您的实际图像以及它在不同屏幕尺寸下的显示方式。 p>

.header {
  position: relative;
}
div.slider {
  position: relative;
}
img {
  width: 100%;
  outline: 0;
  height: auto;
}
div.crop {
  overflow: hidden;
  width: 100%;
  height: 25vw;
  position: relative;
}
div.crop img {
  display: block;
  position: absolute;
  height: auto;
  width: 100%;
  top: 50%;
  margin-top: -50%;
}
@media screen and (max-width: 800px) and (min-width: 480px) {
  div.crop img {
  width: 125%;
  top: 50%;
  margin-top: -60%;
  margin-left: -25%;
  }
}
@media screen and (max-width: 480px) {
  div.crop img {
  width: 300%;
  top: 50%;
  margin-top: -150%;
  margin-left: -150%;
  }
}
div.header-content {
  background-color: yellow;  /* for demo only */
  position: absolute;
  top: 0;
}
div.main-content {}
<div class="header">
  <div class="slider">
    <div class="crop">
      <img class="slide" src="http://placekitten.com/1000/1000" />
    </div>
  </div>
  <div class="header-content">
    <div class="menu">
      A menu
    </div>
    <div class="form">
      A form
    </div>
  </div>
</div>
<div class="main-content">
  Main Content
</div>

【讨论】:

  • 你的方法行不通。当您缩小浏览器尺寸时,图像左侧将有空白区域。这不是目标。
  • 很好地解释了我在做什么:designshack.net/articles/css/…
  • 我调整了左偏移量,只是为了让媒体查询工作正常。您可以将左侧偏移量设置为在 .crop 元素的边缘内裁剪图像所需的任何值。
  • @MDMoura 我查看了 DesignShack.net 文章(写得很好),您会注意到父块 .focal-point 使用 overflow: hidden 裁剪子 div/图像的边缘。您的示例不遵循 DesignShack.net 示例,您无意中遗漏了一些关键的 CSS 规则以使该技术正常工作。我的解决方案类似,只是我选择使用绝对定位而不是图像的相对定位。但是,关键是您需要在包含图像的顶级块上设置overflow: hidden
  • 对不起,我不确定我是否明白了,因为当我更改左侧百分比时,我总是在一侧得到一个空白区域。
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 2014-11-30
  • 2017-05-08
  • 2013-02-11
  • 2018-04-13
  • 2019-10-19
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多