มีวิธีใดในการประกาศขนาด / เส้นขอบบางส่วนให้กับกล่องใน CSS? ยกตัวอย่างเช่นกล่องกับว่ามีเพียงแสดงให้เห็นถึงขอบล่างในที่หนึ่งของมัน350px
60px
ผมคิดว่าอาจมีประโยชน์มาก
ตัวอย่าง:
มีวิธีใดในการประกาศขนาด / เส้นขอบบางส่วนให้กับกล่องใน CSS? ยกตัวอย่างเช่นกล่องกับว่ามีเพียงแสดงให้เห็นถึงขอบล่างในที่หนึ่งของมัน350px
60px
ผมคิดว่าอาจมีประโยชน์มาก
ตัวอย่าง:
คำตอบ:
ไม่จริง. แต่มันง่ายมากที่จะบรรลุเอฟเฟกต์ด้วยวิธีที่ลดระดับลงอย่างสง่างามและไม่ต้องใช้มาร์กอัปที่ไม่จำเป็น:
div {
width: 350px;
height: 100px;
background: lightgray;
position: relative;
margin: 20px;
}
div:after {
content: '';
width: 60px;
height: 4px;
background: gray;
position: absolute;
bottom: -4px;
}
<div></div>
::outside
และ::inside
ฉันเกลียดการใส่มาร์กอัปเพื่อจัดแต่งทรงผมเท่านั้น แต่ฉันไม่คิดว่าจะมีวิธีอื่น
content
ใน:after
รูปแบบอินไลน์หรือ JSS ได้ แต่ใช้งานได้ดีเมื่อใช้ส่วนประกอบที่มีสไตล์
ฉันรู้ว่านี่ได้รับการแก้ไขแล้วและมีการร้องขอพิกเซล อย่างไรก็ตามฉันแค่อยากจะแบ่งปันบางสิ่ง ...
องค์ประกอบข้อความที่ขีดเส้นใต้บางส่วนสามารถทำได้อย่างง่ายดายโดยใช้display:table
หรือdisplay:inline-block
(ฉันไม่ได้ใช้display:inline-block
เพราะใช่คุณก็รู้ว่า4px
-gap ที่น่าอึดอัดใจ)
h1 {
border-bottom: 1px solid #f00;
display: table;
}
<h1>Foo is not equal to bar</h1>
ตรงกลาง , ทำให้มันเป็นไปไม่ได้ที่ศูนย์องค์ประกอบด้วยdisplay:table
มาแก้ไขกันด้วย...text-align:center
margin:auto
h1 {
border-bottom: 1px solid #f00;
display: table;
margin-left: auto;
margin-right: auto;
}
<h1>Foo is not equal to bar</h1>
ดีว่าเป็นสิ่งที่ดี แต่ก็ไม่ได้เป็นบางส่วน
ตามที่ตู้หนังสือได้แนะนำไปแล้วองค์ประกอบหลอกมีมูลค่าทอง
h1 {
display: table;
margin-left: auto;
margin-right: auto;
}
h1:after {
border-bottom: 1px solid #f00;
content: '';
display: block;
width: 50%;
}
<h1>Foo is not equal to bar</h1>
ออฟเซ็ตขีดเส้นใต้ถูกจัดชิดซ้ายในขณะนี้ ในการจัดกึ่งกลางให้กดองค์ประกอบหลอกครึ่งหนึ่งของwidth
( 50% / 2 = 25%
) ไปทางขวา
h1 {
display: table;
margin-left: auto;
margin-right: auto;
}
h1:after {
border-bottom: 1px solid #f00;
content: '';
display: block;
margin-left: 25%;
width: 50%;
}
<h1>Foo is not equal to bar</h1>
... ตามที่davidmatasแสดงความคิดเห็นmargin:auto
บางครั้งการใช้งานสามารถใช้งานได้จริงมากกว่าการคำนวณmargin
-offset ด้วยมือ
ดังนั้นเราสามารถจัดแนวเส้นใต้ไปทางซ้ายขวาหรือกึ่งกลาง (โดยไม่ทราบกระแสwidth
) โดยใช้หนึ่งในชุดค่าผสมเหล่านี้:
margin-right: auto
(หรือปล่อยไว้เฉยๆ)margin: auto
margin-left: auto
ตัวอย่างเต็ม
.underline {
display: table;
margin-left: auto;
margin-right: auto;
}
.underline:after {
border-bottom: 1px solid #f00;
content: '';
display: block;
width: 50%;
}
.underline--left:after {
margin-right: auto; /* ...or just leave it off */
}
.underline--center:after {
margin-left: auto;
margin-right: auto;
}
.underline--right:after {
margin-left: auto
}
<h1 class="underline underline--left">Foo is not equal to bar</h1>
<h1 class="underline underline--center">Foo is not equal to bar</h1>
<h1 class="underline underline--right">Foo is not equal to bar</h1>
สิ่งนี้สามารถนำไปใช้ได้อย่างง่ายดายเพื่อให้เราสามารถใช้องค์ประกอบระดับบล็อกได้ เคล็ดลับคือตั้งค่าความสูงขององค์ประกอบหลอกให้มีความสูงเท่ากับองค์ประกอบจริง (ง่ายๆheight:100%
):
div {
background-color: #eee;
display: table;
height: 100px;
width: 350px;
}
div:after {
border-bottom: 3px solid #666;
content: '';
display: block;
height: 100%;
width: 60px;
}
<div></div>
:after
ฉันชอบmargin: 0 auto
วิธีการอื่น ๆแทนmargin-left: 25%
เพราะมันจะทำงานกับความกว้างใด ๆ ที่คุณประกาศโดยไม่จำเป็นต้องคำนวณทางคณิตศาสตร์
auto
- simplificator :)
นี่คืออีกวิธีการหนึ่งlinear-gradient
ที่คุณสามารถสร้างเส้นที่คุณต้องการได้อย่างง่ายดาย คุณยังสามารถมีหลายบรรทัด (ในแต่ละด้าน) โดยใช้พื้นหลังหลาย ๆ
นี่คือไวยากรณ์อื่นเพื่อให้บรรลุเช่นเดียวกับด้านบน:
.box1 {
width: 200px;
padding: 20px;
margin: 10px auto;
text-align: center;
background:
linear-gradient(#000, #000) top /40% 3px no-repeat,
#ccc
}
.box2 {
width: 200px;
padding: 20px;
margin: 10px auto;
text-align: center;
background:
linear-gradient(red,red) bottom/ 60% 2px no-repeat,
#ccc;
}
.box3{
width: 200px;
padding: 20px;
margin: 10px auto;
text-align: center;
background:
linear-gradient(red , red)bottom left/ 60% 2px,
linear-gradient(blue, blue) 60% 0 / 40% 2px,
linear-gradient(brown, brown) left/ 3px 30%,
linear-gradient(orange, orange) right / 3px 40%,
#ccc;
background-repeat:no-repeat;
}
<div class="box1">
Box1
</div>
<div class="box2">
Box2
</div>
<div class="box3">
Box3
</div>
border-radius
ฉันใช้เส้นตารางเพื่อสร้างเส้นขอบบางส่วน
ดูที่นี่ .
รหัส:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Responsive partial borders</title>
<style>
/* ungrid without mobile */
.row{width:100%;display:table;table-layout:fixed;}
.col{display:table-cell;}
/* things to change */
.row{width: 70%; margin: auto;}
.mid.row > .col{ height: 150px; }
/* draw box and align text */
.col{ text-align: center;}
.top.left.col{
border-top: 1px solid black;
border-left: 1px solid black;
}
.top.right.col{
border-top: 1px solid black;
border-right: 1px solid black;
}
.bottom.left.col{
border-bottom: 1px solid black;
border-left: 1px solid black;
}
.bottom.right.col{
border-bottom: 1px solid black;
border-right: 1px solid black;
}
.mid.row > .col{
border-left: 1px solid black;
border-right: 1px solid black;
vertical-align: middle;
}
.top.center.col{
position: relative;
top: -0.5em;
}
.bottom.center.col{
position: relative;
bottom: -0.5em;
}
</style>
</head>
<body>
<div class="row">
<div class="top left col"></div>
<div class="top center col">Top</div>
<div class="top right col"></div>
</div>
<div class="mid row">
<div class="col">Mid</div>
</div>
<div class="row">
<div class="bottom left col"></div>
<div class="bottom center col">Bottom</div>
<div class="bottom right col"></div>
</div>
</body>
</html>
CSS ไม่รองรับขอบบางส่วน คุณจะต้องใช้องค์ประกอบที่อยู่ติดกันเพื่อจำลองสิ่งนี้