วิธีตั้งค่าความกว้างเส้นโครงร่าง: 1 เฉพาะบางด้านของรูปร่าง SVG


99

การตั้งค่าความกว้างเส้นโครงร่าง: 1 บน a <rect>องค์ประกอบใน SVG จะวางเส้นขีดไว้ที่ทุกด้านของสี่เหลี่ยม

หนึ่งจะวางความกว้างเส้นขีดเพียงสามด้านของสี่เหลี่ยมผืนผ้า SVG ได้อย่างไร?

คำตอบ:


172

หากคุณต้องการจังหวะหรือไม่มีจังหวะคุณสามารถใช้สโตรก - ดาชาร์เรย์เพื่อทำสิ่งนี้ได้โดยทำให้ขีดกลางและช่องว่างตรงกันกับด้านข้างของสี่เหลี่ยม

rect { fill: none; stroke: black; }
.top { stroke-dasharray: 0,50,150 }
.left { stroke-dasharray: 150,50 }
.bottom { stroke-dasharray: 100,50 }
.right { stroke-dasharray: 50,50,100 }
<svg height="300">
    <rect x="0.5" y="0.5" width="50" height="50" class="top"/>
    <rect x="0.5" y="60.5" width="50" height="50" class="left"/>
    <rect x="0.5" y="120.5" width="50" height="50" class="bottom"/>
    <rect x="0.5" y="180.5" width="50" height="50" class="right"/>
</svg>

ดูjsfiddle


เราจะแสดงเส้นขีดเฉพาะด้านบนขององค์ประกอบ rect ได้อย่างไร?
Suresh

1
คุณช่วยอธิบายได้ไหมว่าทำไมจำนวนหนึ่งในบางตำแหน่งจึงให้ผลเช่นนี้
JacobIRR

@JacobIRR อ้างถึงคำจำกัดความของคุณสมบัติ 'stroke-dasharray' (ลิงก์ในคำตอบ) แนวคิดในที่นี้คือการจับคู่ความยาวเส้นประกับด้านข้างของสี่เหลี่ยมผืนผ้าและช่องว่างเส้นประกับด้านที่ไม่ควรมีเส้นขีด
Erik Dahlström

ฉันเพิ่งอัปเดตโซลูชันของคุณในลิงค์นี้codepen.io/shaswatatripathy/pen/oNgPpyd
tripathy

นี่คือโซลูชันแบบเป็นโปรแกรมที่สร้างขึ้นโดยstroke-dasharrayกำหนดให้ออบเจ็กต์กำหนดเส้นขอบที่ควรแสดง การอ่านโค้ดอาจช่วยให้คุณเข้าใจวิธีการทำงาน: codepen.io/lazd/pen/WNweNwy?editors=1010
lazd

31

คุณไม่สามารถเปลี่ยนลักษณะภาพของส่วนต่างๆของรูปร่างเดียวใน SVG (ไม่มีเอฟเฟกต์เวกเตอร์ที่ยังไม่พร้อมใช้งานโมดูล ) แต่คุณจะต้องสร้างรูปร่างแยกกันสำหรับแต่ละจังหวะหรือสไตล์ภาพอื่น ๆ ที่คุณต้องการให้แตกต่างกันไป

โดยเฉพาะสำหรับกรณีนี้แทนที่จะใช้ a <rect>หรือ<polygon>องค์ประกอบคุณสามารถสร้าง<path>หรือ<polyline>ที่ครอบคลุมเพียงสามด้านของสี่เหลี่ยมผืนผ้า:

<!-- Move to 50,50 then draw a line to 150,50, to 150,150, and then to 50,150 -->
<path d="M50,50 L150,50 150,150 50,150" />
<polyline points="50,50 150,50 150,150 50,150" />

คุณสามารถดูผลของการดำเนินการเหล่านี้ได้ที่นี่: http://jsfiddle.net/b5FrF/3/

สี่เหลี่ยมสีแดงมีเส้นขีดสามด้าน

สำหรับข้อมูลเพิ่มเติมโปรดอ่านเกี่ยวกับรูปทรงที่ทรง<polyline>พลังกว่า แต่สับสน<path>กว่า


2

คุณสามารถใช้เส้นโพลีไลน์สำหรับด้านที่ถูกลูบทั้งสามด้านและอย่าวางเส้นขีดบนสี่เหลี่ยมผืนผ้าเลย ฉันไม่คิดว่า SVG ช่วยให้คุณใช้จังหวะที่แตกต่างกันกับส่วนต่างๆของเส้นทาง / รูปร่างได้ดังนั้นคุณต้องใช้วัตถุหลายชิ้นเพื่อให้ได้เอฟเฟกต์เดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.