เส้นขอบสองสี


99

ลูกค้าต้องการเส้นขอบสองสีเพื่อให้ดูนูน ฉันสามารถทำสิ่งนี้ในองค์ประกอบเดียวได้หรือไม่ ฉันหวังว่าจะหลีกเลี่ยงการซ้อนองค์ประกอบ DOM สองรายการที่มีเส้นขอบแยกกัน


คุณยินดีที่จะใช้ Javascript เพื่อให้ได้เอฟเฟกต์หรือไม่? jquery.malsup.com/corner
nopuck4you

คำตอบ:


142

ใช่: ใช้outlineคุณสมบัติ; มันทำหน้าที่เป็นพรมแดนที่สองนอกชายแดนของคุณ ระวังมันสามารถโต้ตอบในรูปแบบที่ว่องไวด้วยระยะขอบพายและเงาหล่น ในบางเบราว์เซอร์คุณอาจต้องใช้คำนำหน้าเฉพาะของเบราว์เซอร์ด้วย เพื่อให้แน่ใจว่ามันรับมัน: -webkit-outlineและสิ่งที่คล้ายกัน (แม้ว่า WebKit โดยเฉพาะจะไม่ต้องการสิ่งนี้)

นอกจากนี้ยังมีประโยชน์ในกรณีที่คุณต้องการสร้างโครงร่างสำหรับบางเบราว์เซอร์ (เช่นในกรณีนี้หากคุณต้องการรวมโครงร่างกับเงาตกกระทบใน WebKit โครงร่างจะอยู่ภายในเงาใน FireFox จะเป็น ด้านนอกจึง-moz-outline: 0มีประโยชน์เพื่อให้แน่ใจว่าคุณจะไม่ได้รับเส้นที่สวยงามรอบ ๆ เงาของ CSS ที่สวยงามของคุณ)

.someclass {
  border: 1px solid blue;
  outline: 1px solid darkblue;
}

แก้ไข:บางคนตั้งข้อสังเกตว่าoutlineไม่ดีกับ IE <8 แม้ว่านี่จะเป็นเรื่องจริง การสนับสนุน IE <8 ไม่ใช่สิ่งที่คุณควรทำ


27
-1 สำหรับ "การสนับสนุน IE <8 ไม่ใช่สิ่งที่คุณควรทำ" ไม่รองรับ IE6 อาจไม่เป็นไร แต่การไม่สนับสนุน IE7 นั้นไร้สาระไม่มีไซต์ใดที่มีผู้ชมที่ไม่ใช่ด้านเทคนิคสามารถจ่ายได้
Pekka

6
outlineมีมาตั้งแต่ CSS2
BoltClock

157
+1 สำหรับการไม่รองรับ IE 7 ในขณะที่ไซต์ของคุณควรทำงานและดูดีพอสมควรใน IE 7 แต่ก็ไม่จำเป็นต้องมีการสนับสนุนอย่างเต็มที่ โดยเฉพาะอย่างยิ่งถ้าเป็นเพียงเส้นขอบสองสี ฉันใช้กล่องเงาและคุณสมบัติ 'ขั้นสูง' เป็นการส่วนตัว IE7 ไม่เห็นกล่องเงา ... เรื่องใหญ่ ไม่มีเหตุผลที่จะใช้โซลูชันที่เหมาะสมน้อยกว่าซับซ้อนเกินไปหรือล้าสมัยเพียงเพื่อหลีกเลี่ยงปัญหาที่ไม่พึงประสงค์ของ IE7
Marian Theisen

2
นอกจากนี้โปรดดูข้อมูลอ้างอิงนี้สำหรับเหตุผลในการเข้าถึงที่ดีที่จะไม่แฮ็กคุณสมบัติโครงร่างเพื่อวัตถุประสงค์ในการออกแบบ: outlinenone.com
Joel Glovier

11
คำเตือนน้อยที่หลากหลายกว่าoutline borderโดยเฉพาะอย่างยิ่งW3C กล่าวว่า : "หมายเหตุโครงร่างเหมือนกันทุกด้านตรงกันข้ามกับเส้นขอบไม่มีคุณสมบัติ" outline-top "หรือ" outline-left "" (เน้นของฉัน)
Bob Stein

72

นี้เป็นไปได้มาก ใช้เล่ห์เหลี่ยม CSS เพียงเล็กน้อย!

div.border {
  border: 1px solid #000;
  position: relative;
}

div.border:before {
  position: absolute;
  display: block;
  content: '';
  border: 1px solid red;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
<div class="border">Hi I have two border colors<br />I am also Fluid</div>

นั่นคือสิ่งที่คุณกำลังมองหา?


แน่นอนว่ามันยุ่งยาก แต่มันก็ลดลงอย่างสง่างามและยังใช้งานได้กับเบราว์เซอร์สต็อกของ HTC (Android)! หากคุณใช้border-radiusลองลดรัศมีของเส้นขอบด้านในลงหนึ่งพิกเซลซึ่งจะทำให้ช่องว่างระหว่างเส้นขอบกลมทั้งสองแทบมองไม่เห็น
ไข้หวัด

นี่เป็นสิ่งที่ดี การใช้bottom:1pxแทนที่จะheight:100%ได้ผลดีกว่าสำหรับฉันเพียงแค่ขอบล่าง :)
นิค

หากคุณมีช่องว่างภายในdiv.borderฉันพบว่าการเพิ่มระยะขอบลบด้วยขนาดเดียวกันสำหรับส่วนdiv.border:beforeช่วยให้ทุกอย่างอยู่ในแนวเดียวกัน อาจจะมีวิธีที่ดีกว่านี้ไหม jsFiddle
NW Tech

34

อีกวิธีหนึ่งคือการใช้box-shadow:

#mybox {
box-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
-moz-box-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
-webkit-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
}

<div id="mybox">ABC</div>

ดูตัวอย่างที่นี่


ฉันชอบสิ่งนี้เนื่องจากมันทำงานกับรัศมีขอบซึ่งแตกต่างจากวิธีการร่าง
Johan

18

คุณได้ลองใช้สไตล์เส้นขอบต่างๆที่มีอยู่ในข้อกำหนด CSS หรือไม่ มีรูปแบบเส้นขอบสองแบบที่อาจรองรับความต้องการของคุณ:

border-style: ridge;

หรือ

border-style: groove;

1
นี่คือสิ่งที่ฉันต้องการ (แก้ไข <fieldset> ใน IE8)
DOOManiac

15

โครงร่างเป็นสิ่งที่ดี แต่เฉพาะเมื่อคุณต้องการให้เส้นขอบอยู่รอบ ๆ

ให้บอกว่าคุณต้องการทำให้เฉพาะด้านล่างหรือด้านบนคุณสามารถใช้ได้

<style>

  #border-top {
  border-top: 1px solid  #ccc;
  box-shadow: inset 0 1px 0 #fff;
}
</style>

<p id="border-top">This is my content</p>

และสำหรับด้านล่าง:

<style>

      #border-bottom {
      border-top: 1px solid  #ccc;
      box-shadow: 0 1px 0 #fff;
    }
</style>

    <p id="border-bottom">This is my content</p>

หวังว่านี่จะช่วยได้


6

แทนที่จะใช้โครงร่างที่ไม่รองรับและมีปัญหาให้ใช้

  • background-color + padding สำหรับขอบด้านใน
  • เส้นขอบปกติสำหรับด้านนอก

ตัวอย่าง:

HTML:

<img src="http://cdn3.thumbs.common.smcloud.net/common/8/6/s/863444wpPN.jpg/r-0,500-n-863444wpPN.jpg" alt="malkovich" />

CSS:

img {
    padding: 1px;
    background: yellow;
    border:1px solid black;
}

ทดสอบ (JSFiddle) :


ใช้ได้ดี แต่เฉพาะในกรณีที่คุณมีเนื้อหาที่มีพื้นหลัง
Culme

4

ถ้าโดยการ "ลายนูน" คุณหมายถึงเส้นขอบสองเส้นที่มีสีต่างกันสองสีแสดงว่ามีoutlineคุณสมบัติ ( outline-left, outline-right.... ) แต่ไม่ได้รับการสนับสนุนในตระกูล IE (กล่าวคือ IE6 และ 7 ไม่รองรับเลย ). หากคุณต้องการสองเส้นขอบองค์ประกอบกระดาษห่อที่สองจะดีที่สุด

หากคุณหมายถึงการใช้สองสีในเส้นขอบเดียวกัน ใช้เช่น

border-right: 1px white solid;
border-left: 1px black solid;
border-top: 1px black solid;
border-bottom: 1px white solid;

มีพิเศษborder-stylesนี้เช่นกัน ( ridge, outsetและinset) แต่พวกเขามีแนวโน้มที่จะแตกต่างกันในเบราว์เซอร์ในประสบการณ์ของผม


3
ฉันเชื่อว่าสิ่งที่เขาถามคือสิ่งborder : black white; ที่หมายถึงการกำหนดสีที่แตกต่างกันสองสีสำหรับเส้นขอบเดียวซึ่งมีลักษณะตามลำดับในเวลาเดียวกัน
Tarik

1
@ Braveyard อ่าฉันเห็น นั่นจะเป็นไปได้ในทางทฤษฎีโดยใช้outlineแต่จะไม่ทำงานได้ดีใน IE <8
Pekka

3
โปรดทราบว่ามีเพียงโครงร่าง ... ไม่มีสิ่งที่เรียกว่าโครงร่างซ้ายโครงร่างขวาโครงร่างด้านบนหรือโครงร่างด้านล่าง
David Sherret

-1

ไม่ได้ แต่คุณควรตรวจสอบเพื่อดูว่าborder-styleค่าชอบinset, outsetหรืออื่น ๆ ประสบความสำเร็จผลที่คุณต้องการ .. ( ฉันสงสัยมันแม้ว่า .. )

CSS3 มีคุณสมบัติborder-imageแต่ฉันยังไม่รู้เกี่ยวกับการรองรับจากเบราว์เซอร์ (ดูข้อมูลเพิ่มเติมได้ที่http://www.css3.info/preview/border-image/ ) ..


ไม่มีอะไรที่เป็นไปไม่ได้ในโลกแห่งการเขียนโปรแกรม: ฉันชอบพูดประโยคนี้ตลอดเวลา :)
Tarik

-1

เพียงแค่เขียน

style="border:medium double;"

สำหรับแท็ก html


1
นั่นทำให้สองเส้นขอบมีสีเดียวระหว่างพวกเขา
Williham Totland

-1

คุณสามารถใช้

<html>
<head>
<title>Two Colors</title>
<style type="text/css">

.two-colors {
background: none repeat scroll 0% 0% rgb(245, 245, 245); border-color: rgba(111,111,111,0.2) transparent;
 padding: 4px; outline: 1px solid green;
}

</style>

<style type="text/css">
      body {
        padding-top: 20px;
        padding-bottom: 40px;
        background-color:yellow;        
      }
    </style>

</head>
<body>
<a target="_blank" href="people.htm">
  <img class="two-colors" src="people.jpg" alt="Klematis" width="213" height="120" />
  </a>

</body>
</html>

-2

สิ่งนี้ก่อให้เกิดผลที่ดี

<div style="border: 1px solid gray; padding: 1px">
<div style="border: 1px solid gray">
   internal stuff
</div>
</div>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.