代码之家  ›  专栏  ›  技术社区  ›  Hafthor

如何在HTML/CSS中仅显示图像的一部分?

  •  113
  • Hafthor  · 技术社区  · 17 年前

    假设我想要一种方法来显示一个图像的中心50x50px,在HTML中是250x250px。我该怎么做呢。还有,有没有一种方法可以对css:url()引用执行此操作?

    我知道 夹子 在CSS中,但这似乎只有在与绝对定位一起使用时才起作用。

    3 回复  |  直到 17 年前
        1
  •  176
  •   ShreevatsaR    6 年前

    clip css属性,尽管它 要求被剪裁的元素是 position: absolute; (真可惜):

    .container {
      position: relative;
    }
    #clip {
      position: absolute;
      clip: rect(0, 100px, 200px, 0);
      /* clip: shape(top, right, bottom, left); NB 'rect' is the only available option */
    }
    <div class="container">
      <img src="http://lorempixel.com/200/200/nightlife/3" />
    </div>
    <div class="container">
      <img id="clip" src="http://lorempixel.com/200/200/nightlife/3" />
    </div>

    JS Fiddle demo

    clip-path ,它已取代现在已弃用的 夹子

    这个 剪辑路径 属性允许一系列选项(比原始选项更多) ),其中:

    • inset -矩形/长方体形状,用四个值定义为“距离” (top right bottom left) .
    • circle circle(diameter at x-coordinate y-coordinate) .
    • ellipse ellipse(x-axis-length y-axis-length at x-coordinate y-coordinate) .
    • polygon x / y 相对于左上角元素原点的坐标。当路径自动闭合时,多边形的实际最小点数应为三个,更少的(两个)为直线或(一个)为点: polygon(x-coordinate1 y-coordinate1, x-coordinate2 y-coordinate2, x-coordinate3 y-coordinate3, [etc...]) .
    • url -这可以是本地URL(使用CSS id选择器)或外部文件的URL(使用文件路径)来标识SVG,尽管我还没有尝试过这两种方法,因此我无法提供关于它们的好处或警告的见解。

    div.container {
      display: inline-block;
    }
    #rectangular {
      -webkit-clip-path: inset(30px 10px 30px 10px);
      clip-path: inset(30px 10px 30px 10px);
    }
    #circle {
      -webkit-clip-path: circle(75px at 50% 50%);
      clip-path: circle(75px at 50% 50%)
    }
    #ellipse {
      -webkit-clip-path: ellipse(75px 50px at 50% 50%);
      clip-path: ellipse(75px 50px at 50% 50%);
    }
    #polygon {
      -webkit-clip-path: polygon(50% 0, 100% 38%, 81% 100%, 19% 100%, 0 38%);
      clip-path: polygon(50% 0, 100% 38%, 81% 100%, 19% 100%, 0 38%);
    }
    <div class="container">
      <img id="control" src="http://lorempixel.com/150/150/people/1" />
    </div>
    <div class="container">
      <img id="rectangular" src="http://lorempixel.com/150/150/people/1" />
    </div>
    <div class="container">
      <img id="circle" src="http://lorempixel.com/150/150/people/1" />
    </div>
    <div class="container">
      <img id="ellipse" src="http://lorempixel.com/150/150/people/1" />
    </div>
    <div class="container">
      <img id="polygon" src="http://lorempixel.com/150/150/people/1" />
    </div>

    JS Fiddle demo ,用于实验。

        2
  •  124
  •   Matt user129975    11 年前

    一种方法是将要显示的图像设置为容器中的背景(td、div、span等),然后调整背景位置以获得所需的精灵。

        3
  •  41
  •   thanksd thibaut noah    10 年前

    另一种选择是以下方法,尽管不是最干净的方法,因为它假定图像是容器中的唯一元素,例如在本例中:

    <header class="siteHeader">
      <img src="img" class="siteLogo" />
    </header>
    

    .siteHeader{
        width: 50px;
        height: 50px;
        overflow: hidden;
    }
    
    .siteHeader .siteLogo{
        margin: -100px;
    }
    

    演示可以在中看到 this JSFiddle

        4
  •  2
  •   Alexander van Oostenrijk    4 年前

    调整背景位置,以在屏幕的不同位置移动背景图像 div :

    div { 
      background-image: url('image url')
      background-position: 0 -250px; 
    }