在CSS中创建一个十字形状

19

3
使用两个叠加的元素?或者更好的方法是使用一个元素和 ::after 伪元素(或 ::before)。 - Kyle
1
你不能用单个元素做到这一点... 最好选择SVG或画布... - Prasath K
2
十字形已经被添加到css-tricks中了:https://css-tricks.com/examples/ShapesOfCSS/ - tsiorn
5个回答

43

仅使用伪元素,您可以实现类似以下的效果:

http://jsbin.com/upiyoc/1/edit

#cross {
   width: 100px;
   height: 100px;
   position: relative;
}

#cross:before, #cross:after {
  content: "";
  position: absolute;
  z-index: -1;
  background: #d00;
}

#cross:before {
  left: 50%;
  width: 30%;
  margin-left: -15%;
  height: 100%;
}

#cross:after {
  top: 50%;
  height: 30%;
  margin-top: -15%;
  width: 100%;
}

根据 #cross 元素的 widthheight,十字架的大小将按比例缩放。


更新:另一种使用更少代码的解决方案可以简单地涉及多个线性渐变(不使用伪元素),例如:

http://codepen.io/anon/pen/zxwgPo

#cross {
  width: 100px;
  height: 100px;

  background: linear-gradient(to bottom, transparent 35%, 
                                         #d00 35%, 
                                         #d00 65%,  
                                         transparent 65%),

              linear-gradient(to right, transparent 35%, 
                                         #d00 35%, 
                                         #d00 65%,  
                                         transparent 65%),
}

有人能告诉我为什么需要使用 "absolute" 吗?我在 CodePen 上测试了一下,如果你将它更改为相对定位或者去掉它,即使指定了高度和宽度像素,它也不会显示... 帮帮我,不知道为什么让我疯狂 ;( - carinlynchin
1
如果没有使用position: absolute,你应该给它们一个display(或者float)属性,否则伪元素将无法显示(它们不是真正的元素,且它们的content属性为空)。因此,使用position: absolute可以避免使用float(或display)属性。 - Fabrizio Calderan
哦,好的...所以任何没有内容的伪元素都必须使用绝对定位?你能告诉我在W3文档中哪里写到了吗?像这样的东西我真希望知道如何在文档中查找。哈哈 - carinlynchin

6
当然可以。你只需要使用两个元素:参见http://jsfiddle.net/92XTx/2/
封闭的div元素采用相对定位,以便两个子元素可以绝对定位。
#cross {
    position: relative;
    width: 150px;
    height: 150px;
}

这里它们都是绝对定位的:

#cross div {
    position: absolute;
    background: red;
}

让它们重叠。

然后创建您的形状:

.cross-vertical {
    left: 33%;
    width: 33%;
    height: 100%;
}

.cross-horizontal {
    top: 33%;   
    width: 100%;
    height: 33%;
}

5

因为我在这里看到的所有答案都显得过于冗长或依赖于特定的供应商前缀。

#cross { 
  background: red; 
  height: 100px; 
  position: relative; 
  left: 50px;
  width: 20px; 
} 
#cross:after { 
  background: red; 
  content: ""; 
  height: 20px; 
  left: -40px; 
  position: absolute; 
  top: 40px; 
  width: 100px; 
}
<div id="cross"></div>


3
可以使用常规的“+”加字符和text-stroke来实现。 演示仅适用于Webkit,Android

div {
  font-size: 80px;
  -webkit-text-stroke: 20px red;
  display: inline-block;
  padding: 0 20px;
}
<div>+</div>


0

CSS Transform 可以轻松实现加号形状

.close {
  position: absolute;
  right: 10px;
  top: 6px;
  width: 20px;
  height: 20px;
  opacity: 0.3;
}
.cross:before, .cross:after {
  position: absolute;
  left: 15px;
  content: ' ';
  height: 21px;
  width: 2px;
  background-color: #333;
}
.cross:before {
  transform: rotate(0deg);
}
.cross:after {
  transform: rotate(-90deg);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接