Как создать форму ценника в CSS и HTML



Итак, я нашел этот ответ - CSS3 форма меню, Стиль, но понятия не имею, как поместить его на левую сторону. Я уже искал его, но безуспешно.



Вот чего я пытаюсь добиться:



Введите описание изображения здесь



И я нашел это тоже - изменить форму треугольника. Как я могу заставить его работать на противоположной стороне? Я имею в виду, что стрелка должна быть с левой стороны. И возможно ли это сделать с одним div?

1190   6  

6 ответов:

Хотите один, который вы можете поместить на любой цвет фона?

простая форма ценника в css, html

Jsbin demo

Только этот HTML:

<span class="pricetag"></span>

И этот CSS:

.pricetag{
    white-space:nowrap;
    position:relative;
    margin:0 5px 0 10px;
    displaY:inline-block;
    height:25px;
    border-radius: 0 5px 5px 0;
    padding: 0 25px 0 15px;
    background:#E8EDF0;
    border: 0 solid #C7D2D4;
    border-top-width:1px;
    border-bottom-width:1px;
    color:#999;
    line-height:23px;
}
.pricetag:after{
    position:absolute;
    right:0;
    margin:1px 7px;
    font-weight:bold;
    font-size:19px;
    content:"\00D7";
}
.pricetag:before{
    position:absolute;
    content:"\25CF";
    color:white;
    text-shadow: 0 0 1px #333;
    font-size:11px;
    line-height:0px;
    text-indent:12px;
    left:-15px;
    width: 1px;
    height:0px;
    border-right:14px solid #E8EDF0;
    border-top:  13px solid transparent;
    border-bottom:  13px solid transparent;
}

Который в основном следует этим принципам: Как создать форму ленты в CSS


Если вы хотите добавить границы вокруг:

Введите описание изображения здесь

Jsbin demo с преобразованием: rotate(45deg) применяется к :before псевдо

.pricetag{
    white-space:nowrap;
    position:relative;
    margin:0 5px 0 10px;
    displaY:inline-block;
    height:25px;
    border-radius: 0 5px 5px 0;
    padding: 0 25px 0 15px;
    background:#E8EDF0;
    border: 1px solid #C7D2D4;
    color:#999;
    line-height:23px;
}
.pricetag:after{
    position:absolute;
    right:0;
    margin:1px 7px;
    font-weight:bold;
    font-size:19px;
    content:"\00D7";
}
.pricetag:before{
    position:absolute;
    background:#E8EDF0;
    content:"\25CF";
    color:white;
    text-shadow: 0 0 1px #aaa;
    font-size:12px;
    line-height:13px;
    text-indent:6px;
    top:3px;
    left:-10px;
    width: 18px;
    height: 18px;
    transform: rotate(45deg);
    border-left:1px solid #C7D2D4;
    border-bottom:1px solid #C7D2D4;
}

Поскольку примерное изображение в вопросе имеет дополнительные внешние границы, достижение его с помощью трюка с границей будет включать в себя несколько (псевдо) элементов и станет сложным (потому что в дополнение к форме стрелки, круг также необходим спереди). Вместо этого то же самое может быть достигнуто с помощью transform: rotate(), как в приведенном ниже примере.

Подход довольно прост и выглядит следующим образом:

  • родительский контейнер div содержит текст, который должен присутствовать в ценнике форма.
  • псевдо-элемент :after имеет transform: rotate(45deg) и производит форму треугольника. Затем он располагается абсолютно относительно левого края родителя. Набор background на псевдо-элементе предотвращает видимость левой границы родительского контейнера.
  • псевдо-элемент :before образует окружность, присутствующую с левой стороны (используя border-radius).
  • метка X в конце добавляется с помощью тега span и сущности &times;.
  • Родительский div контейнер width устанавливается в auto , чтобы он мог расширяться в зависимости от длины текста.

Примечание: в этом примере используются преобразования, поэтому потребуются полифиллы в более низких версиях IE.

div {
  position: relative;
  display: inline-block;
  width: auto;
  height: 20px;
  margin: 20px;
  padding-left: 15px;
  background: #E8EDF2;
  color: #888DA3;
  line-height: 20px;
  border-radius: 4px;
  border: 1px solid #C7D2DB;
}
div:after,
div:before {
  position: absolute;
  content: '';
  border: 1px solid #C7D2DB;
}
div:after {  /* the arrow on left side positioned using left property */
  height: 14px;
  width: 14px;
  transform: rotate(45deg);
  background: #E8EDF2;
  border-color: transparent transparent #C7D2DB #C7D2DB;
  left: -6px;
  top: 2px;
}
div:before {  /* the circle on the left */
  height: 4px;
  width: 4px;
  border-radius: 50%;
  background-color: white;
  left: 0px;
  top: 7px;
  z-index: 2;
}
.right {  /* the x mark at the right */
  text-align: right;
  margin: 0px 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div>Home<span class='right'>&times;</span>
</div>
<div>Home Sweet Home<span class='right'>&times;</span>
</div>
<div>Hi<span class='right'>&times;</span>
</div>

Скрипка Демо

Я хотел упрощенную версию того, что было предложено здесь (без эффекта отверстия и границ), но с указывающей стороной с закругленным углом. Поэтому я придумал это решение. Визуально это то, что вы получаете:

Элементы в форме тегов

HTML для него:

<div class="price-tag">Marketing</div>
<div class="price-tag">Sales</div>
<div class="price-tag">Inbound</div>

И CSS для него:

.price-tag {
  background: #058;
  border-radius: 5px;
  color: #fff;
  cursor: pointer;
  display: inline-block;
  font-size: 0.875rem;
  height: 30px;
  line-height: 30px;
  margin-right: 1rem;
  padding: 0 0.666rem;
  position: relative;
  text-align: center;
}
.price-tag:after {
  background: inherit;
  border-radius: 4px;
  display: block;
  content: "";
  height: 22px;
  position: absolute;
  right: -8px;
  top: 4px;
  -ms-transform: rotate(45deg); /* IE 9 */
  -webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */
  transform: rotate(45deg);
  width: 22px;
  z-index: -1;
}
.price-tag:hover {
  background: #07b;
}

Оригинальный пример

Изменено: http://jsbin.com/ruxusobe/1/

В основном, он должен плавать влево, использовать границу-вправо (вместо левой) и изменять заполнение.

CSS:

.guideList{
    font-size: 12px;
    line-height: 12px;
    font-weight: bold;
    list-style-type: none;
    margin-top: 10px;
    width: 125px;
}

.guideList li{
    padding: 5px 5px 5px 0px;
}

.guideList .active{
    background-color: #0390d1;
    color: white;
}

.guideList .activePointer{
    margin-top: -5px;
    margin-bottom: -5px;
    float: left;
    display: inline-block;
    width: 0px;
    height: 0px;
    border-top: 11px solid white;
    border-right: 11px solid transparent;
    border-bottom: 11px solid white;
}

HTML:

<ul class="guideList">
    <li><a>Consulting</a></li>
    <li class="active"><span class="activePointer"></span>Law</li>
    <li><a>Finance</a></li>
    <li><a>Technology</a></li>
</ul>

Вот простой пример...

Оригинальная Версия

Отредактированная Версия

CSS:

div {
    margin-left: 15px;
    background: #76a7dc;
    border: 1px solid #CAD5E0;
    padding: 4px;
    width:50px;
    position: relative;
}
div:after {
    content:'';
    display: block;
    position: absolute;
    top: 2px;
    left: -1.3em;
    width: 0;
    height: 0;
    border-color: transparent #76a7dc transparent transparent;
    border-style: solid;
    border-width: 10px;
}

Обратите внимание на border-color, только right задается цветом, а все остальное-прозрачным.

Используя элемент pseudo и немного играя с элементом border, Вы можете достичь точного результата. Проверьте демо-версия.

HTML-код:

<a class="arrow" href="#">Continue Reading</a>

CSS код:

body{padding:15px;}  
.arrow {
    background: #8ec63f;
    color: #fff;
    display: inline-block;
    height: 30px;
    line-height: 30px;
    padding: 0 12px;
    position: relative;
    border-radius: 4px;
    border: 1px solid #8ec63f;

    }
    .arrow:before {
    content: "";
    height: 0;
    position: absolute;
    width: 0;
    }
    .arrow:before {
    border-bottom: 15px solid transparent;
    border-right: 15px solid #8ec63f;
    border-top: 15px solid transparent;
    left: -15px; 
    }

   .arrow:hover {
    background: #f7941d;
    color: #fff;
     border-radius: 4px;
    border: 1px solid #f7941d;
    }
    .arrow:hover:before {
    border-bottom: 15px solid transparent;
    border-top: 15px solid transparent;;
    border-right: 15px solid #f7941d;
    }

Comments

    Ничего не найдено.