सीएसएस: बीच में पाठ के साथ सर्कल कैसे बनाएं?


156

मैंने इस उदाहरण को स्टैकओवरफ्लो पर पाया:

अकेले सीएसएस का उपयोग करके सर्कल बनाएं

जो माहान है। लेकिन मैं जानना चाहता हूं कि उस उदाहरण को कैसे संशोधित किया जाए ताकि मैं सर्कल के बीच में पाठ को शामिल कर सकूं?

मुझे यह भी पता चला: सीएसएस में सर्कल में लंबवत और क्षैतिज रूप से केंद्रित पाठ (जैसे iPhone अधिसूचना बैज)

लेकिन किसी कारण से, यह मेरे लिए काम नहीं कर रहा है। जब मैं निम्नलिखित परीक्षण कोड बनाता हूं:

<div class="badge">1</div>

एक सर्कल के बजाय, मुझे एक अंडाकार आकार मिलता है। मैं यह देखने के लिए कोड के साथ खेलने की कोशिश कर रहा हूं कि मैं इसे कैसे प्राप्त कर सकता हूं।

जवाबों:


328

JSFiddle

.circle {
  width: 500px;
  height: 500px;
  border-radius: 50%;
  font-size: 50px;
  color: #fff;
  line-height: 500px;
  text-align: center;
  background: #000
}
<div class="circle">Hello I am A Circle</div>


8
@dot: वास्तव में मेरा नहीं कर रहा है - bryanhadaway.com/how-to-create-circles-with-css
जावद

3
यदि आप इस border-radius:50%;कोड को चौड़ाई और ऊंचाई के आधार पर प्रत्येक बार इस विशेषता को बदलने के बिना अपने कोड ईवेंट को अधिक सुरुचिपूर्ण और पोर्टेबल बना सकते हैं ;)
bonCodigo

14
व्यक्तिगत रूप से मैं लाइन-ऊँचाई विशेषता को हटा दूँगा और ऊर्ध्वाधर-संरेखित करूँगा: मध्य; प्रदर्शन: टेबल-सेल; इस तरह से आपके टेक्स्ट की लाइनें अभी भी केंद्रित रहेंगी। jsfiddle.net/z9bLtw99
ministe2003

3
कई लाइनों के बारे में क्या।
हेनरी झू

1
@DamjanPavlica इस उत्तर पर अंतिम अपडेट देखें जो स्पष्ट रूप से कोई चौड़ाई या ऊँचाई निर्धारित नहीं करता है। कई लाइनों के लिए भी काम करता है, जैसा कि आप jsfiddle पर लाइव सत्यापित कर सकते हैं
जोस रुई सैंटोस

57

यदि आपकी सामग्री को लपेटने जा रहा है और अज्ञात ऊंचाई का है, तो यह आपकी सबसे अच्छी शर्त है:

http://cssdeck.com/labs/aplvrmue

.badge {
  height: 100px;
  width: 100px;
  display: table-cell;
  text-align: center;
  vertical-align: middle;
  border-radius: 50%; /* may require vendor prefixes */
  background: yellow;
}


6
यह अंडाकार उत्पन्न करता है, न कि पूर्ण वृत्त।
सोफीवोरस

2
यही वास्तविक समाधान है। हालाँकि, मुझे उल्लेख करना चाहिए, कि display: absoluteएलिंगमेंट टूट जाता है - लेकिन आसान उपाय यह है कि इसे दूसरे डिव के अंदर लपेटा जाए।
ओन्डेज़ एजेल्को

1
एक पूर्ण चक्र (अंडाकार नहीं) पैदा करता है। इसके अलावा रैपर div वास्तव में एक अच्छा विचार है जब पूर्ण या निश्चित स्थिति का उपयोग किया जाता है।
१२:४२ पर किरवार

2
पूर्ण स्थिति के लिए, आप एक आवरण का उपयोग करेंगे। लेकिन यह एक अंडाकार देता है क्योंकि अधिकतम चौड़ाई 180px तक जा सकती है। इसलिए यदि आप न्यूनतम चौड़ाई उस चौड़ाई को निर्दिष्ट करते हैं जो आप चाहते हैं और साथ ही उस मान की ऊँचाई निर्धारित करें। आपको एक सर्कल मिलेगा। अन्यथा आपको चौड़ाई और ऊंचाई> 180px से परे एक अंडाकार मिलेगा।
म्यूट

27

आप css3 का उपयोग कर सकते हैं flexbox

HTML:

<div class="circle-with-text">
    Here is some text in circle
</div>

सीएसएस:

.circle-with-text {
  justify-content: center;
  align-items: center;
  border-radius: 100%;
  text-align: center;
  display: flex;
}

यह आपको लंबवत और क्षैतिज रूप से मध्य संरेखित एकल रेखा और बहु-पंक्ति पाठ की अनुमति देगा।


1
एक आदर्श दुनिया में सबसे अच्छा समाधान। अफसोस की बात है कि फ्लेक्सबॉक्स के कार्यान्वयन में कई क्रॉस-ब्राउज़र बग रहते हैं: github.com/philipwalton/flexbugs
jimaayler

IE के लिए: `` `प्रदर्शन: -ms-flexbox` ``
माइकल गिल्ड

11

मुझे लगता है कि आप एक अंडाकार या वृत्त में पाठ लिखना चाहते हैं? यह एक क्यों नहीं?

<span style="border-radius:50%; border:solid black 1px;padding:5px">Hello</span>


8

एक वेब डिज़ाइन के लिए मुझे हाल ही में दिया गया था जिसे मुझे एक निश्चित सर्कल इश्यू में टेक्स्ट की केंद्रित और अज्ञात मात्रा को हल करना था और मैंने सोचा कि मैं अन्य लोगों के लिए सर्कल / टेक्स्ट कॉम्बो में देख रहा हूं।

मुख्य मुद्दा जो मेरे पास था वह अक्सर सर्कल की सीमा को तोड़ देगा। इसे हल करने के लिए मैंने 4 divs का उपयोग किया। एक आयताकार कंटेनर जिसने सर्कल की अधिकतम (निश्चित) सीमाओं को निर्दिष्ट किया। इसके अंदर वह मंडल होगा जो सर्कल को उसकी चौड़ाई और ऊंचाई के साथ 100% तक खींचता है ताकि माता-पिता का आकार बदलकर वास्तविक सर्कल का आकार बदल जाए। इसके अंदर एक और आयताकार div होगा, जो% s का उपयोग करते हुए, एक पाठ सीमा क्षेत्र बनाएगा जिससे किसी भी पाठ को वृत्त (सबसे अधिक भाग के लिए) से रोका जा सके और फिर पाठ और ऊर्ध्वाधर केंद्र के लिए वास्तविक div होगा।

यह कोड के रूप में अधिक समझ में आता है:

/* Main Container -  this controls the size of the circle */
.circle_container
{
	width : 128px;
	height : 128px;
	margin : 0;
	padding : 0;
/*	border : 1px solid red; */
}

/* Circle Main draws the actual circle */
.circle_main
{
	width : 100%;
	height : 100%;
	border-radius : 50%;
	border : 2px solid black;	/* can alter thickness and colour of circle on this line */
	margin : 0;
	padding : 0;
}

/* Circle Text Container - constrains text area to within the circle */
.circle_text_container
{
	/* area constraints */
	width : 70%;
	height : 70%;
	max-width : 70%;
	max-height : 70%;
	margin : 0;
	padding : 0;

	/* some position nudging to center the text area */
	position : relative;
	left : 15%;
	top : 15%;
	
	/* preserve 3d prevents blurring sometimes caused by the text centering in the next class */
	transform-style : preserve-3d;
	
	/*border : 1px solid green;*/
}

/* Circle Text - the appearance of the text within the circle plus vertical centering */
.circle_text
{
	/* change font/size/etc here */
	font: 11px "Tahoma", Arial, Serif;	
	text-align : center;
	
	/* vertical centering technique */
	position : relative;
	top : 50%;
	transform : translateY(-50%);
}
<div class="circle_container">
	<div class="circle_main">
		<div class="circle_text_container">
			<div class = "circle_text">
				Here is an example of some text in my circle.
			</div>
		</div>
	</div>
</div>			

आप कन्टेनर्स पर बॉर्डर के रंगों को देख सकते हैं कि यह कैसे बनता है।

जिन चीजों के बारे में पता होना चाहिए: यदि आप बहुत अधिक पाठ डालते हैं या शब्दों / अटूट पाठ का उपयोग करते हैं, तो आप अभी भी वृत्त की सीमा को तोड़ सकते हैं। यह अभी भी पूरी तरह से अज्ञात पाठ (जैसे कि उपयोगकर्ता इनपुट) के लिए एक अच्छा फिट नहीं है, लेकिन सबसे अच्छा काम करता है जब आप अस्पष्ट रूप से जानते हैं कि आपको अपने सर्कल के आकार और फ़ॉन्ट आकार को स्टोर करने के लिए सबसे बड़ी मात्रा में पाठ की आवश्यकता होगी। आप पाठ कंटेनर div को किसी भी अतिप्रवाह को छिपाने के लिए सेट कर सकते हैं, लेकिन यह सिर्फ "टूटा हुआ" दिख सकता है और वास्तव में आपके डिजाइन में अधिकतम आकार के लिए लेखांकन के लिए कोई प्रतिस्थापन नहीं है।

आशा है कि यह किसी के लिए उपयोगी है! HTML / CSS मेरा मुख्य अनुशासन नहीं है इसलिए मुझे यकीन है कि इस पर सुधार किया जा सकता है!


8

HTML टैग के साथ और बिना CSS के बीच में टेक्स्ट के साथ एक सर्कल बनाएं

HTML में इसके लिए SVG टैग है। यदि आप CSS के लिए नहीं जाना चाहते हैं तो आप इस मानक दृष्टिकोण का पालन कर सकते हैं।

 <svg width="100" height="100">
   <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="white" />
     Sorry, your browser does not support inline SVG.
   <text fill="#000000" font-size="18" font-family="Verdana"
     x="15" y="60">ASHISH</text>
 </svg>

यहां छवि विवरण दर्ज करें


अनियमित पाठकों के लिए भविष्य में संदर्भ के लिए: के रूप में कोड और छवि में देखा जा, पाठ केंद्रित है सिर्फ इसलिए font-size, font-family, x, और yलाइन अप। किसी भी एक के लिए Verdana स्थापित नहीं है, यह केंद्रित नहीं होगा। उपयोग x="50%" y="50%" dominant-baseline="middle" text-anchor="middle"करने से समस्या हल नहीं होती है।
लॉसमनोस

6

यदि यह पाठ की केवल एक पंक्ति है, तो आप लाइन की ऊँचाई वाली संपत्ति का उपयोग कर सकते हैं, तत्व ऊंचाई के समान मूल्य के साथ:

height:100px;
line-height:100px;

यदि पाठ में कई लाइनें हैं, या यदि सामग्री परिवर्तनशील है, तो आप पैडिंग-टॉप का उपयोग कर सकते हैं:

padding-top:30px;
height:70px;

उदाहरण: http://jsfiddle.net/2GUFL/


6

बेशक, आपको ऐसा करने के लिए टैग का उपयोग करना होगा। एक वृत्त बनाने के लिए और दूसरा पाठ के लिए।

यहां कुछ कोड आपकी मदद कर सकते हैं

#circle {
    background: #f00;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    color:black;

}
.innerTEXT{
    position:absolute;
    top:80px;
    left:60px;
}

<div id="circle">
    <span class="innerTEXT"> Here a text</span>
</div>

यहां लाइव उदाहरण http://jsbin.com/apumik/1/edit

अपडेट करें

यहां कुछ बदलावों के साथ कम छोटे

http://jsbin.com/apumik/3/edit


धन्यवाद! मैं आपके उदाहरण को पोस्ट में पाए गए ( stackoverflow.com/questions/4801181/… ) से बेहतर समझता हूं, लेकिन मैं यह समझना चाहता हूं कि वह उदाहरण मेरे लिए काम क्यों नहीं कर रहा है ...
dot

ऐसा लगता है कि उन्होंने वही काम किया है जो आप कर रहे हैं, लेकिन बस सीएसएस में एक वर्ग में संयुक्त ...?
डॉट

हां, मैंने सिर्फ गौर किया कि मैंने ऐसा ही किया।
लिगथ

एकांत दें, बीमार को बेहतर बनाने के लिए मेरी पोस्ट और मेरे कोड को अपडेट करें: D
Ligth


3

यदि आप फाउंडेशन 5 और कम्पास फ्रेमवर्क का उपयोग कर रहे हैं, तो आप यह कोशिश कर सकते हैं।

.sass इनपुट

$circle-width: rem-calc(25) !default;
$circle-height: $circle-width !default;
$circle-bg: #fff !default;
$circle-radius: 50% !default;
$circle-line-height: $circle-width !default;
$circle-text-align: center !default;

@mixin circle($cw:$circle-width, $ch:$circle-height, $cb:$circle-bg, $clh:$circle-line-height, $cta:$circle-text-align, $cr:$circle-radius) {
    width: $cw;
    height: $ch;
    background: $cb;
    line-height: $clh;
    text-align: $cta;
    @include inline-block;
    @include border-radius($cr);
}

.circle-default {
    @include circle;
}

.css आउटपुट

.circle-default {
  width: 1.78571rem;
  height: 1.78571rem;
  background: white;
  line-height: 1.78571rem;
  text-align: center;
  display: -moz-inline-stack;
  display: inline-block;
  vertical-align: middle;
  *vertical-align: auto;
  zoom: 1;
  *display: inline;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  -ms-border-radius: 50%;
  -o-border-radius: 50%;
  border-radius: 50%;
}

2

इसे YouTube पेज से प्राप्त किया गया है, जिसका वास्तव में सरल सेट अप है। बिल्कुल बनाए रखने योग्य और पुन: प्रयोज्य।

.circle {
    position: absolute;
    top: 4px;
    color: white;
    background-color: red;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    line-height: 18px;
    font-size: 10px;
    text-align: center;
    cursor: pointer;
    z-index: 999;
}
<div class="circle">2</div>


2

यहाँ के कुछ समाधानों ने छोटे हलकों पर मेरे लिए अच्छा काम नहीं किया। इसलिए मैंने ol निरपेक्ष स्थिति का उपयोग करके यह समाधान बनाया।

SASS का उपयोग इस तरह दिखेगा:

.circle-text {
    position: relative;
    display: block;
    text-align: center;
    border-radius: 50%;
    > .inner-text {
        display: block;
        @extend .center-align;
    }
}

.center-align {
    position: absolute;
    top: 50%;
    left: 50%;
    margin: auto;
    -webkit-transform: translateX(-50%) translateY(-50%);
    -ms-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
}

@mixin circle-text($size) {
    width: $size;
    height: $size;
    @extend .circle-text;
}

और इस्तेमाल किया जा सकता है

#red-circle {
    background-color: red;
    border: 1px solid black;
    @include circle-text(50px);
}

#green-circle {
    background-color: green;
    border: 1px solid black;
    @include circle-text(150px);
}

Https://codepen.io/matheusrufca/project/editor/DnYPMK पर डेमो देखें

उत्पादन सीएसएस देखने के लिए स्निपेट देखें


0

इसका एक तरीका यह है कि टेक्स्ट को बीच में संरेखित करने के लिए फ्लेक्सबॉक्स का उपयोग किया जाए। जिस तरह से मैंने इसे करने के लिए पाया, वह निम्नलिखित है:

HTML:

<div class="circle-without-text">
  <div class="text-inside-circle">
    The text
  </div>
</div>

सीएसएस:

.circle-without-text {
    border-radius: 50%;
    width: 70vh;
    height: 70vh;
    background-color: red;
    position: relative;
 }

.text-inside-circle {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
 }

यहाँ plnkr: https://plnkr.co/edit/EvWYLNfTb1B7igoc3TZx?p=preview


0

इस कोड का उपयोग करना उत्तरदायी भी होगा।

<div class="circle">ICON</div>

.circle {
  position: relative;
  display: inline-block;
  width: 100%;
  height: 0;
  padding: 50% 0;
  border-radius: 50%;
  /* Just making it pretty */
  -webkit-box-shadow: 0 4px 0 0 rgba(0, 0, 0, 0.1);
  box-shadow: 0 4px 0 0 rgba(0, 0, 0, 0.1);
  text-shadow: 0 4px 0 rgba(0, 0, 0, 0.1);
  background: #38a9e4;
  color: white;
  font-family: Helvetica, Arial Black, sans;
  font-size: 48px;
  text-align: center;
}

0

.circle {
  width: 500px;
  height: 500px;
  border-radius: 50%;
  font-size: 50px;
  color: #fff;
  line-height: 500px;
  text-align: center;
  background: #000
}
<div class="circle">Hello I am A CircleHello I am A CircleHello I am A CircleHello I am A CircleHello I am A CircleHello I am A CircleHello I am A CircleHello I am A CircleHello I am A Circle</div>


यह दूसरे उत्तर की सीधी कॉपी है। शर्म की बात है। -1
टिम गौटियर

0

मैं अन्य लोगों के साथ कुछ जवाब मिला रहा था floatऔर relativeइसने मुझे वह परिणाम दिया जिसकी मुझे आवश्यकता थी।

HTML में मैं div का उपयोग करता हूं। मैं इसे liएक नेविगेशन बार के लिए अंदर उपयोग करता हूं ।

.large-list-style {
    float: left;
    position: relative;
    top: -8px;

    border-radius: 50%;

    margin-right: 8px;

    background-color: rgb(34, 198, 200);

    font-size: 18px;
    color: white;
}
    .large-list-style:before,
    .large-list-style:after {
        content: '\200B';
        display:inline-block;
        line-height:0;

        padding-top: 50%;
        padding-bottom: 50%;
    }
    .large-list-style:before {
        padding-left: 16px;
    }
    .large-list-style:after {
        padding-right: 16px;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.