使用CSS绘制顶部边界提示

时间:2015-05-15 03:36:39

标签: css css3 css-shapes

我试图在CSS中提示。

到目前为止,我有“中间成功”,唯一的问题是,根据DIV宽度,尖端有时不在中心位置。

我想要的是什么:

enter image description here

到目前为止我的代码:

.logo {
    color: #000;
    font-size: 1.4em;
    text-align: center;
    padding-top: 1.5em;
    text-transform: uppercase;
    position: relative;
}

.line {
  height: 1px;
  overflow: hidden;
  background: #000;
}

.line.top,
.line.bottom {
  width: 90%;
}

.line.top {
  margin: 0 auto 4px;
}

.line.bottom {
  margin: 4px auto 0;
}

.angle {
  position: absolute;
  top: 19px;
  left: 46%; // I think my problem is here!
}

.angle .line.left,
.angle .line.right {
  width: 20px;
}

.angle .line.left {
  -ms-transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
  margin: 7px;
}

.angle .line.right {
  -ms-transform: rotate(-45deg);
  -webkit-transform: rotate(-45deg);
  transform: rotate(-45deg);
  margin: -7px;
}
  
<div class="logo">
  <div class="angle">
    <div class="line left"></div>
    <div class="line right"></div>
  </div>
  
  <div class="line top"></div>
  
  MY TEXT
  
  <div class="line bottom"></div>
</div>

我该如何解决这个问题?

我想设置 .angle width: 30pxmargin: 0 auto,但它有position: absolute,所以不可能。

Ps:LESS可以使用。

4 个答案:

答案 0 :(得分:3)

不需要这么多元素。只需使用.logo元素及其伪类。并使用letter-spacing css属性在字母之间留出空格。 (或使用确切的字体,如果您知道名称

<强> CSS

.logo {
    color: #000;
    font-size: 1.4em;
    text-align: center;
    height: 2em;
    margin-top: 2em;
    letter-spacing: 1em;
    text-transform: uppercase;
    line-height: 2em;
    position: relative;
    border-top: 1px solid #000;
    border-bottom: 1px solid #000;
}
.logo::after, .logo::before {
    content:"";
    border-width: 20px;
    border-style: solid;
    position: absolute;
    left: 50%;
    bottom: 100%;
    transform: translateX(-50%);
}
.logo::after {
    border-width: 18px;
    margin-bottom: 1px;
    border-color: transparent transparent white transparent;
}
.logo::before {
    border-color: transparent transparent black transparent;
}

Working Fiddle - using CSS

Working Fiddle - using SCSS

答案 1 :(得分:0)

嵌套三角形!

&#13;
&#13;
.outer {
    border: 40px solid transparent;
    border-bottom: 40px solid black;
    width: 0;
    height: 0;
    position: relative;
    margin: 0 auto;
}
.inner {
    border: 36px solid transparent;
    border-bottom: 36px solid white;
    width: 0;
    height: 0;
    position: absolute;
    top: -32px;
    left: -36px;   
}
&#13;
<div class="outer">
    <div class="inner"></div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以旋转div并为其添加边框。然后使用z-indexing将它放在div后面,只有一个顶部和底部边框保存文本。可能看起来像这样:

<!DOCTYPE html>
<html>
<head>
<style>
html{padding: 10px;}
.triangle {
        width: 10%;
        height: 10%;
        -webkit-transform: rotate(45deg);
        -moz-transform: rotate(45deg);
        -o-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
        transform: rotate(45deg);
        z-index: -1;
        border-top: 1px solid black;
        border-left: 1px solid black;
        position: absolute;
        top: 20px;
        left: 45%;
    }
    .textBox {
        height: 40px;
        border-top: 1px solid black;
        border-bottom: 1px solid black;
        background: white;
        z-index: 2;
        text-align: center;
    }
</style>
</head>
<body>
<div class="logo">
      <div class="triangle"></div>

      <div class="textBox">
      MY TEXT
      </div>
    </div>
</body>
</html>

答案 3 :(得分:0)

body{
    margin-top:70px;
}
h2{
    color:#fff;
    text-align:center;
}
.arrow_box {
    position: relative;
    background: #88b7d5;
    border: 4px solid #c2e1f5;
}
.arrow_box:after, .arrow_box:before {
    bottom: 100%;
    left: 50%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
}
.arrow_box:after {
    border-color: rgba(136, 183, 213, 0);
    border-bottom-color: #88b7d5;
    border-width: 30px;
    margin-left: -30px;
}
.arrow_box:before {
    border-color: rgba(194, 225, 245, 0);
    border-bottom-color: #c2e1f5;
    border-width: 36px;
    margin-left: -36px;
}

查看工作演示here.