【问题标题】:Create a cross shape in CSS在 CSS 中创建十字形
【发布时间】:2013-06-25 22:28:42
【问题描述】:

有可能吗,我知道此链接中可以使用以下所有形状:

http://css-tricks.com/examples/ShapesOfCSS/

但是交叉也必须是可能的。当我说十字架时,我的意思是这样的:

【问题讨论】:

  • 使用两个相互叠加的元素?或者甚至更好:一个带有 ::after 伪元素(或 ::before)的元素
  • 你不能用一个单一的元素来做到这一点。最好选择 SVG 或画布......
  • 现在css-tricks实际上已经添加了十字架:css-tricks.com/examples/ShapesOfCSS

标签: css shapes css-shapes


【解决方案1】:

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);
}

【讨论】:

    【解决方案2】:

    因为我在这里看到的所有答案看起来要么冗长要么依赖于供应商前缀,

    #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】:

      你可以只用伪元素来实现这样的事情:

      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%),
      }
      

      【讨论】:

      • 谁能告诉我为什么需要“绝对”?我在codepen上对其进行了测试,如果您将其相对更改或取出,它不会显示...即使具有指定的高度和宽度像素...帮助..它让我发疯不知道;(
      • 没有 position: absolute 你应该给他们一个显示(或浮动)否则伪元素是不可见的(他们不是真正的元素,他们的content 属性是空的)所以这里 position: absolute 使不需要使用浮动(或显示)属性
      • 哦,好吧...所以任何类型的没有内容的伪元素都必须具有绝对值?你能告诉我它在w3中的什么地方吗?像这样的事情我希望我知道如何在那个东西中查找。大声笑
      【解决方案4】:

      这可以使用常规的“+”加号和text-stroke 来完成

      DEMO (Webkit,Android only)

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

      【讨论】:

        【解决方案5】:

        当然是。你只需要使用两个元素:见http://jsfiddle.net/92XTx/2/

        封闭的 div 是 relatively 定位的,因此两个孩子都可以绝对定位。

        #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%;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-30
          • 1970-01-01
          • 2018-06-12
          • 1970-01-01
          • 2015-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多