Adakah cara untuk mendeklarasikan ukuran / batas parsial ke kotak di CSS? Misalnya sebuah kotak dengan 350px
yang hanya memperlihatkan tepi-bawah pada awalnya 60px
. Saya pikir itu mungkin sangat berguna.
Contoh:
Adakah cara untuk mendeklarasikan ukuran / batas parsial ke kotak di CSS? Misalnya sebuah kotak dengan 350px
yang hanya memperlihatkan tepi-bawah pada awalnya 60px
. Saya pikir itu mungkin sangat berguna.
Contoh:
Jawaban:
Tidak juga. Tetapi sangat mudah untuk mencapai efek dengan cara yang terdegradasi dengan anggun dan tidak memerlukan markup yang berlebihan:
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
dan ::inside
elemen semu belum tersedia, saya benci memberi markup hanya untuk gaya, tapi saya rasa tidak ada cara lain.
content
di :after
sebagai gaya inline atau JSS, tetapi bekerja dengan baik menggunakan komponen bergaya.
Saya tahu, ini sudah diselesaikan dan piksel diminta. Namun, saya hanya ingin berbagi sesuatu ...
Elemen teks yang digarisbawahi sebagian dapat dengan mudah dicapai dengan menggunakan display:table
ataudisplay:inline-block
(Saya hanya tidak menggunakan display:inline-block
karena, ya Anda tahu, 4px
celah- canggung ).
h1 {
border-bottom: 1px solid #f00;
display: table;
}
<h1>Foo is not equal to bar</h1>
Pemusatan , display:table
tidak memungkinkan untuk memusatkan elemen text-align:center
.
Mari kita atasi dengan margin:auto
...
h1 {
border-bottom: 1px solid #f00;
display: table;
margin-left: auto;
margin-right: auto;
}
<h1>Foo is not equal to bar</h1>
Yah , itu bagus, tapi tidak hanya sebagian .
Seperti rak buku yang sudah diperkenalkan, elemen semu bernilai emas.
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>
Offset , sekarang garis bawahnya rata kiri. Untuk memusatkannya, cukup dorong elemen semu setengah dari its width
( 50% / 2 = 25%
) ke kanan.
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>
... sebagai davidmatas dikomentari , menggunakan margin:auto
terkadang lebih praktis, daripada menghitung- margin
offset dengan tangan.
Jadi, kita bisa menyelaraskan garis bawah ke kiri, kanan atau tengah (tanpa mengetahui arus width
) dengan menggunakan salah satu kombinasi berikut:
margin-right: auto
(atau biarkan saja)margin: auto
margin-left: auto
Contoh lengkapnya
.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>
Ini dapat dengan mudah diadopsi, sehingga kita dapat menggunakan elemen level blok. Triknya adalah dengan mengatur ketinggian elemen semu ke ketinggian yang sama dengan elemen aslinya (sederhana 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
saya lebih suka margin: 0 auto
pendekatan daripada margin-left: 25%
karena itu akan bekerja dengan lebar apa pun yang Anda nyatakan tanpa perlu melakukan matematika.
auto
- simplificator :)
Berikut adalah solusi lain yang bergantung pada linear-gradient
tempat Anda dapat dengan mudah membuat jenis garis apa pun yang Anda inginkan. Anda juga dapat memiliki beberapa baris (di setiap sisi misalnya) dengan menggunakan beberapa latar belakang:
Berikut adalah sintaks lain untuk mencapai hal yang sama seperti di atas:
.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>
Saya menggunakan kisi untuk menggambar beberapa batas.
Lihat disini .
Kode:
<!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 tidak mendukung batas parsial. Anda perlu menggunakan elemen yang berdekatan untuk mensimulasikan ini.