2015-01-19 3 views
0

настоящее время у меня этот HTML:Как вы рисуете линию с границы?

#circle { 
 
    background-color: orange; 
 
    max-width: 40px; 
 
    margin-right: 20px; 
 
    margin-bottom: 20px; 
 
    min-width: 40px; 
 
    min-height: 40px; 
 
    font-size: 12px; 
 
    border-radius: 50%; 
 
    font-weight: bold; 
 
    text-align: center; 
 
    vertical-align: middle; 
 
    line-height: 40px; 
 
    float:left; 
 
} 
 
#innerContent { 
 
    border: solid 2px black; 
 
    padding: 3px; 
 
} 
 
#pointerDiv{ 
 
    float:left; 
 
}
<div id="circle"><span id='innerContent'>123</span></div><div id='pointerDiv'>text goes here</div>

Я пытаюсь добиться этого эффекта:

Desired effect

В принципе, линия, которая идет от границы до точки к элементу я могу заполнить текст, который объясняет число. Как мне это сделать?

+0

Где элемент, содержащий текст? –

+0

Вордс, мое плохое. Исправлена! – ohyeah

+0

Может ли линия всегда иметь одинаковую длину (или) может ли отображаемое на экране положение элемента, содержащего текст, меняться? – Harry

ответ

2

Ниже является одним из методов выборки, чтобы достичь этого, используя псевдо-элемент, а затем позиционировать его абсолютно по мере необходимости.

Причина left: -58px потому, что margin-right (я изменил его от 20px в вопросе 50px в ответ только для иллюстрации) является 50px + граница коробки несколько точек внутри круга и так, что также необходимо было рассмотреть. Строка width выполнена меньше, чем значение left, чтобы сделать конец линии непосредственно перед pointerDiv.

Обратите внимание, что я также добавил clear: both в #circle только в том случае, если вы хотите добавить больше таких записей один под другим. Если это не требуется, его можно удалить.

#circle { 
 
    background-color: orange; 
 
    max-width: 40px; 
 
    margin-right: 50px; 
 
    margin-bottom: 20px; 
 
    min-width: 40px; 
 
    min-height: 40px; 
 
    font-size: 12px; 
 
    border-radius: 50%; 
 
    font-weight: bold; 
 
    text-align: center; 
 
    vertical-align: middle; 
 
    line-height: 40px; 
 
    float: left; 
 
    clear: both; 
 
} 
 
#innerContent { 
 
    border: solid 2px black; 
 
    padding: 3px; 
 
} 
 
#pointerDiv { 
 
    float: left; 
 
    position: relative; 
 
    height: 40px; 
 
    line-height: 40px; 
 
} 
 
#pointerDiv:before { 
 
    content: ''; 
 
    position: absolute; 
 
    border: 1px solid black; 
 
    top: 50%; 
 
    left: -58px; 
 
    width: 55px; 
 
}
<div id="circle"><span id='innerContent'>123</span> 
 
</div> 
 
<div id='pointerDiv'>text goes here</div> 
 

 
<div id="circle"><span id='innerContent'>123</span> 
 
</div> 
 
<div id='pointerDiv'>some lengthy text goes here</div> 
 

 
<div id="circle"><span id='innerContent'>123</span> 
 
</div> 
 
<div id='pointerDiv'>short txt</div>

+1

Взял немного смещения pointerDiv: до настроек для моей ситуации, но он отлично работает сейчас, спасибо! – ohyeah

1

Вы всегда можете использовать псевдоэлементы? Я создал базовый макет ниже:

.circle { 
 
    height: 55px; 
 
    width: 55px; 
 
    border-radius: 50%; 
 
    background: orange; 
 
    position: relative; 
 
    display: inline-block; 
 

 
} 
 
.circle:before { 
 
    position: absolute; 
 
    content: "hi"; 
 
    height: 60%; 
 
    top: 20%; 
 
    left: 20%; 
 
    width: 60%; 
 
    border: 2px solid black; 
 
} 
 
.circle:after { 
 
    position: absolute; 
 
    content: ""; 
 
    width: 100%; 
 
    right: -85%; 
 
    top: 50%; 
 
    border-bottom: 1px solid black; 
 
} 
 
.tooltip { 
 
    display: inline-block; 
 
    margin-left: 55px; 
 
    height: 60px; 
 
    width:60px; 
 
} 
 
.wrapper{ 
 
    display:block; 
 
    }
<div class="wrapper"> 
 
    <div class="circle"></div> 
 
    <div class="tooltip">text goes here</div> 
 
</div>

+1

Почти аналогичные идеи, но OP может принять только один ответ, поэтому я хотел вознаградить ваши усилия. Пожалуйста, не считайте сочувствующим, а скорее взаимным признанием подобных мыслей. – Harry

+1

@Harry: Большинство наших ответов * справедливо * похоже (хорошо, в большинстве случаев в любом случае). Так что это обычно самый быстрый ответ на сообщение между, ну, вы меня, Web-тики и chipChocolate.py: P – jbutler483

2

Вы можете использовать границы CSS или SVG, чтобы нарисовать линию (не могут быть совместимы с некоторыми браузера)

#circle { 
 
    background-color: orange; 
 
    max-width: 40px; 
 
    margin-bottom: 20px; 
 
    min-width: 40px; 
 
    min-height: 40px; 
 
    font-size: 12px; 
 
    border-radius: 50%; 
 
    font-weight: bold; 
 
    text-align: center; 
 
    vertical-align: middle; 
 
    line-height: 40px; 
 
    float: left; 
 
} 
 
#innerContent { 
 
    border: solid 2px black; 
 
    padding: 3px; 
 
} 
 
#pointerDiv { 
 
    float: left; 
 
    line-height: 40px; 
 
} 
 
#line-svg { 
 
    float: left; 
 
    margin-top: 20px; 
 
    margin-left: -6px; 
 
    width: 100px; 
 
}
<div id="circle"><span id='innerContent'>123</span> 
 
</div> 
 
<svg id="line-svg"> 
 
    <line x1="0" y1="0" x2="100%" y2="0" style="stroke:rgb(0,0,0);stroke-width:4" /> 
 
</svg> 
 
<div id='pointerDiv'>text goes here</div>

+0

Интересный ответ, спасибо! Однако я бы предпочел использовать CSS только по соображениям совместимости. – ohyeah

+0

SVG - очень CSS3, вот так определенно лучше пойдите со старой школой CSS – Jaay

+0

Приятный альтернативный идеал mate :) – Harry

Смежные вопросы