এসভিজিতে পাঠ্যের পটভূমির রঙ


103

আমি এসএসজি এর পটভূমি CSS এর textঅনুরূপ রঙ করতে চাইbackground-color

আমি কেবলমাত্র ডকুমেন্টেশন সন্ধান করতে পেরেছি fill, যা টেক্সটটিকে রঙ করে

এটা কি সম্ভব?


আপনি কি এখন পর্যন্ত আপনার কোডটি ভাগ করতে পারেন?
গোটোহেলস

এগুলোও সাহায্য করতে পারে stackoverflow.com/questions/6725288/svg-text-inside-rect এবং stackoverflow.com/questions/8675223/...
gotohales

ফিল্টারগুলি ব্যবহার করে এটি কীভাবে করা যায় তাও স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / १२২60০৩70০/২ দেখায়।
এরিক ডালস্ট্রোম

4
@ রবার্টলঙ্গসন এই প্রশ্নটিকে নকল হিসাবে বন্ধ করে যখন অন্যটির 2 বছর আগে জিজ্ঞাসা করা হয়েছিল তখন ভুল মনে হয়, বিশেষত যখন সেখানে কেবল উত্তরটি আপনারই থাকে।
বালথাজার

@ অপেরু: নকল লক্ষ্য নির্বাচন করার সময় কোনও প্রশ্নের বয়সই মূল কারণ নয়, উদাহরণস্বরূপ এখানে দেখুন
হন্ক

উত্তর:


95

না এটি সম্ভব নয়, এসভিজি উপাদানগুলির background-... উপস্থাপনা বৈশিষ্ট্য নেই

এই প্রভাবটি অনুকরণ করতে আপনি পাঠ্য বৈশিষ্ট্যের পিছনে একটি আয়তক্ষেত্র আঁকতে পারেন fill="green"বা অনুরূপ কিছু (ফিল্টার)। জাভাস্ক্রিপ্ট ব্যবহার করে আপনি নিম্নলিখিতগুলি করতে পারেন:

var ctx = document.getElementById("the-svg"),
textElm = ctx.getElementById("the-text"),
SVGRect = textElm.getBBox();

var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
    rect.setAttribute("x", SVGRect.x);
    rect.setAttribute("y", SVGRect.y);
    rect.setAttribute("width", SVGRect.width);
    rect.setAttribute("height", SVGRect.height);
    rect.setAttribute("fill", "yellow");
    ctx.insertBefore(rect, textElm);

9
এটি বা পাঠ্যের উপর একটি এসজিজি ফিল্টার (ফেফ্লুড + ফে কমপোজিট) ব্যবহার করুন। সামান্য অনুরূপ প্রশ্ন স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 12260370/… দেখুন
এরিক ডালস্ট্রোম

4
GetBBox () ব্যবহার করে এই সমাধানটি যদিও এটি ঠিক ঠিক কাজ করে, যখন প্রচুর পরিমাণে গণনা করা দরকার তখন বেশ ধীর হতে পারে। একটি এসজিজি ফিল্টার (ফেফ্লুড + ফেইম কমপোজিট) ব্যবহার করার বিষয়টি হ'ল পাঠটি কিছুটা ঝাঁকুনির সাথে বেরিয়ে আসে। নীচে একটি সহজ, কিন্তু হ্যাকি সমাধান অফার করেছেন।
dbarton_uk

TextElm = ctx.getElementById ("the-text") এর পরিবর্তে TextElm = document.getElementById ("the-text") ব্যবহার করা ভাল?
সাইমন হাই

আমি নোডজেএস-তে একই গতিবক্স ফাংশনটি কীভাবে ব্যবহার করি
আলী

78

আপনি পটভূমি উত্পন্ন করতে একটি ফিল্টার ব্যবহার করতে পারেন।

<svg width="100%" height="100%">
  <defs>
    <filter x="0" y="0" width="1" height="1" id="solid">
      <feFlood flood-color="yellow"/>
      <feComposite in="SourceGraphic" operator="xor" />
    </filter>
  </defs>
<text filter="url(#solid)" x="20" y="50" font-size="50">solid background</text>
</svg>


4
"সোর্সগ্রাফিক" এর অর্থ এখানে কী? "ইউআরএল (# সোলিড)" আসলে কী কোনও অতিরিক্ত ওয়েব অ্যাক্সেসের কারণ করে?
বেন স্লেড

7
পাঠ্যটি এখানে অস্পষ্ট :(
তেরান

4
আপনি কি ব্যাকগ্রাউন্ড প্যাডিং দিতে পারেন ?
vsync

4
এই সমাধানটি তাত্ত্বিকভাবে পছন্দ করুন তবে এটি নিশ্চিত করতে পারবেন যে পাঠ্যটি অস্পষ্ট। দেখে মনে হচ্ছে ফিল্টারটি অ্যান্টি-এলিয়জিং ব্রেক করে।
পৌলমনিকো

4
অস্পষ্ট লেখাটি প্রতিরোধ operator="xor"করতে যুক্ত করুন feComposite। @RobertLongson @teran @paulmelnikow @bill
Saeid

20

আমি যে সমাধানটি ব্যবহার করেছি তা হ'ল:

<svg>
  <line x1="100" y1="100" x2="500" y2="100" style="stroke:black; stroke-width: 2"/>    
  <text x="150" y="105" style="stroke:white; stroke-width:0.6em">Hello World!</text>
  <text x="150" y="105" style="fill:black">Hello World!</text>  
</svg>

স্ট্রোক এবং স্ট্রোক-প্রস্থের বৈশিষ্ট্য সহ একটি সদৃশ পাঠ্য আইটেম স্থাপন করা হচ্ছে। স্ট্রোকটি পটভূমির রঙের সাথে মিলিত হওয়া উচিত এবং স্ট্রোক-প্রস্থটি একটি "স্প্লডজ" তৈরি করতে যথেষ্ট বড় হওয়া উচিত যার উপর প্রকৃত পাঠ্যটি লিখতে হবে।

কিছুটা হ্যাক এবং সম্ভাব্য সমস্যা রয়েছে তবে আমার পক্ষে কাজ করে!


4
আমি এই সমাধানটি সবচেয়ে সহজ হিসাবে পেয়েছি।
মরগান উইল্ড

এটি সবচেয়ে সহজ সমাধান হিসাবে নিশ্চিত করেছেন
বিজ্ঞানী

ফিল্টার সমাধান মুদ্রণ সময় খুব ঝাপসা ছিল যেখানে দুর্দান্তভাবে মুদ্রণ।
ডেভিড হান্ট

18

না, আপনি এসভিজি উপাদানগুলিতে পটভূমি রঙ যুক্ত করতে পারবেন না। আপনি এটি d3 দিয়ে প্রোগ্রামগতভাবে করতে পারেন ।

var text = d3.select("text");
var bbox = text.node().getBBox();
var padding = 2;
var rect = self.svg.insert("rect", "text")
    .attr("x", bbox.x - padding)
    .attr("y", bbox.y - padding)
    .attr("width", bbox.width + (padding*2))
    .attr("height", bbox.height + (padding*2))
    .style("fill", "red");

4
এটা কাজ করে না; এটি কেবল পাঠ্যের রঙ পরিবর্তন করে, পটভূমির রঙটি নয়।
ডেভিড জে।

4
ঘিরা টেক্সট একটি DIV আছে বা বিঘত এবং যেটা গত দুই আপনার ব্যবহার করেছেন styling প্রয়োগ করুন।
আরিফ বুরহান 1

এই পোস্টটি এটি ভালভাবে ব্যাখ্যা করেছে: ক্যামব্রিজ- ইনটহলেন্স.com/…
বিনিময় করুন

6

<text>ট্যাগ ব্যবহার করার পরিবর্তে, ট্যাগটি ব্যবহার করা <foreignObject>যেতে পারে, যা সিএসএসের সাহায্যে এক্সএইচটিএমএল সামগ্রীের জন্য অনুমতি দেয়।


4
আপনি একটি উদাহরণ ছেড়ে যেতে পারেন?
IgniteCoders

4
আন্ডাররেটেড উত্তর। বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে / এসভিজি / এলিমেট / ফায়ারফাইনবজেক্টে একটি দরকারী উদাহরণ রয়েছে। আপনার বিদেশী অবজেক্টের মধ্যে আপনি CSS সংজ্ঞা সহ ডিভ এবং স্প্যান ব্যবহার করতে পারেন।
ডাঃ জেরি

4

রবার্ট লংসসন (@ রবার্টলংসসন) এর পরিবর্তনের মাধ্যমে উত্তর:

<svg width="100%" height="100%">
  <defs>
    <filter x="0" y="0" width="1" height="1" id="solid">
      <feFlood flood-color="yellow"/>
      <feComposite in="SourceGraphic" operator="xor"/>
    </filter>
  </defs>
  <text filter="url(#solid)" x="20" y="50" font-size="50"> solid background </text>
  <text x="20" y="50" font-size="50">solid background</text>
</svg>

এবং আমাদের কোনও ঝাপসা নেই এবং ভারী কোনও "getBox" নেই :) ফিল্ডিং সহ পাঠ্য-উপাদানগুলিতে সাদা স্থান দ্বারা প্যাডিং সরবরাহ করা হয়। এটা আমার জন্য কাজ


2

এটি আমার প্রিয় হ্যাক (এটি কাজ করা উচিত তা নিশ্চিত নয়)। এটি এমন একটি উপাদান উল্লেখ করে যা এখনও প্রদর্শিত হয়নি এবং এটি বেশ ভালভাবে কাজ করে

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 620 40" preserveAspectRatio="xMidYMid meet">
    <defs>
        <filter x="-0.02" y="0" width="1.04" height="1.1" id="removebackground">
            <feFlood flood-color="#00ffff"/>
        </filter>
    </defs>

    <!--Draw the text--> 
    <use xlink:href="#mygroup" filter="url(#removebackground)" />
    <g id="mygroup">
        <text id="text1" x="9" y="20" style="text-anchor:start;font-size:14px;">custom text with background</text>  
        <line x1="200" y1="18" x2="200" y2="36" stroke="#000" stroke-width="5"/> 
        <line x1="120" y1="27" x2="203" y2="27" stroke="#000" stroke-width="5"/> 
    </g>
</svg>


2

আপনি পাঠ্যের সাথে ফিল্টার একত্রিত করতে পারেন।

<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8 />
    <title>SVG colored patterns via mask</title>
  </head>
  <body>
    <svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <filter x="0" y="0" width="1" height="1" id="bg-text">
          <feFlood flood-color="white"/>
          <feComposite in="SourceGraphic" operator="xor" />
        </filter>
      </defs>
	  <!-- something has already existed -->
    <rect fill="red" x="150" y="20" width="100" height="50" />
    <circle cx="50"  cy="50" r="50" fill="blue"/>
      
      <!-- Text render here -->
      <text filter="url(#bg-text)" fill="black" x="20" y="50" font-size="30">text with color</text>
      <text fill="black" x="20" y="50" font-size="30">text with color</text>
    </svg>
  </body>
</html> 


1

রবার্টের উত্তরের মতো একটি পটভূমি যখন কোনও পাঠ্য উপাদানটিতে প্যাডিং প্রয়োগ করতে হয় তা ভাবতে তাদের জন্য নিম্নলিখিতটি করুন:

  <svg>
    <defs>
      <filter x="-0.1" y="-0.1" width="1.2" height="1.2" id="solid">
        <feFlood flood-color="#171717"/>
        <feComposite in="SourceGraphic" operator="xor" />
      </filter>
    </defs>
    <text filter="url(#solid)" x="20" y="50" font-size="50">Hello</text>
  </svg>

উপরের উদাহরণে, ফিল্টার এর এক্স এবং ওয়াই অবস্থানগুলি যেমন ব্যবহার করা যেতে পারে transform: translate(-10%, -10%), এবং প্রস্থ এবং উচ্চতার মানগুলি 120%এবং হিসাবে পড়া যায়120% । সুতরাং আমরা ২০% বড় ব্যাকগ্রাউন্ড তৈরি করেছি এবং এটি -১০% অফসেট করেছি, সুতরাং পাঠ্যের প্রতিটি অংশে পটভূমি এখন 10% বড়।


0

পূর্ববর্তী উত্তরগুলি পাঠ্য দ্বিগুণ করার উপর নির্ভর করেছিল এবং পর্যাপ্ত সাদা জায়গার অভাব ছিল।

ব্যবহারের atopএবং&nbsp; আমি যে ফলাফল চেয়েছিলাম তা পেতে সক্ষম হয়েছি।

এই উদাহরণে তীর অন্তর্ভুক্ত রয়েছে, এসভিজি পাঠ্য লেবেলের জন্য একটি সাধারণ ব্যবহারের কেস:

<svg viewBox="-105 -40 210 234">
<title>Size Guide</title>
<defs>
    <filter x="0" y="0" width="1" height="1" id="solid">
        <feFlood flood-color="white"></feFlood>
        <feComposite in="SourceGraphic" operator="atop"></feComposite>
    </filter>
    <marker id="arrow" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
        <path d="M 0 0 L 10 5 L 0 10 z"></path>
    </marker>
</defs>
<g id="garment">
    <path id="right-body" fill="none" stroke="black" stroke-width="1" stroke-linejoin="round" d="M0 0 l30 0 l0 154 l-30 0"></path>
    <path id="right-sleeve" d="M30 0 l35 0 l0 120 l-35 0" fill="none" stroke-linejoin="round" stroke="black" stroke-width="1"></path>
    <use id="left-body" href="#right-body" transform="scale(-1,1)"></use>
    <use id="left-sleeve" href="#right-sleeve" transform="scale(-1,1)"></use>
    <path id="collar-right-top" fill="none" stroke="black" stroke-width="1" stroke-linejoin="round" d="M0 -6.5 l11.75 0 l6.5 6.5"></path>
    <use id="collar-left-top" href="#collar-right-top" transform="scale(-1,1)"></use>
    <path id="collar-left" fill="white" stroke="black" stroke-width="1" stroke-linejoin="round" d="M-11.75 -6.5 l-6.5 6.5 l30 77 l6.5 -6.5 Z"></path>
    <path id="front-right" fill="white" stroke="black" stroke-width="1" d="M18.25 0 L30 0 l0 154 l-41.75 0 l0 -77 Z"></path>
    <line x1="0" y1="0" x2="0" y2="154" stroke="black" stroke-width="1" stroke-dasharray="1 3"></line>
    <use id="collar-right" href="#collar-left" transform="scale(-1,1)"></use>
</g>
<g id="dimension-labels">
    <g id="dimension-sleeve-length">
        <line marker-start="url(#arrow)" marker-end="url(#arrow)" x1="85" y1="0" x2="85" y2="120" stroke="black" stroke-width="1"></line>
        <text font-size="10" filter="url(#solid)" fill="black" x="85" y="60" class="dimension" text-anchor="middle" dominant-baseline="middle"> 120 cm</text>
    </g>
    <g id="dimension-length">
        <line marker-start="url(#arrow)" marker-end="url(#arrow)" x1="-85" y1="0" x2="-85" y2="154" stroke="black" stroke-width="1"></line>
        <text font-size="10" filter="url(#solid)" fill="black" x="-85" y="77" text-anchor="middle" dominant-baseline="middle" class="dimension"> 154 cm</text>
    </g>
    <g id="dimension-sleeve-to-sleeve">
        <line marker-start="url(#arrow)" marker-end="url(#arrow)" x1="-65" y1="-20" x2="65" y2="-20" stroke="black" stroke-width="1"></line>
        <text font-size="10" filter="url(#solid)" fill="black" x="0" y="-20" text-anchor="middle" dominant-baseline="middle" class="dimension">&nbsp;130 cm&nbsp;</text>
    </g>
    <g title="Back Width" id="dimension-back-width">
        <line marker-start="url(#arrow)" marker-end="url(#arrow)" x1="-30" y1="174" x2="30" y2="174" stroke="black" stroke-width="1"></line>
        <text font-size="10" filter="url(#solid)" fill="black" x="0" y="174" text-anchor="middle" dominant-baseline="middle" class="dimension">&nbsp;60 cm&nbsp;</text>
    </g>
</g>
</svg>

-1

আপনি আপনার পাঠ্যে শৈলী যুক্ত করতে পারেন:

  style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); 
    text-shadow: rgb(255, 255, 255) -2px -2px 0px, rgb(255, 255, 255) -2px 2px 0px, 
     rgb(255, 255, 255) 2px -2px 0px, rgb(255, 255, 255) 2px 2px 0px;"

সাদা, এই উদাহরণে। আইই তে কাজ করে না :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.