Bir kutuya boyut / kısmi kenarlık bildirmenin herhangi bir yolu var mı?


105

CSS'de bir kutuya boyut / kısmi kenarlık bildirmenin herhangi bir yolu var mı? Örneğin, 350pxbunun olduğu bir kutu ilklerinde yalnızca bir kenarlık-altını gösterir 60px. Bunun çok faydalı olabileceğini düşünüyorum.

Örnekler:

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin

Yanıtlar:


155

Pek sayılmaz. Ancak efekti, zarif bir şekilde azalacak ve gereksiz işaretleme gerektirmeyecek şekilde elde etmek çok kolaydır:

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>


3
+ 1'lenmeden doğru yanıtı işaretlemek gibisi yoktur. Ama seni + 1'ledim! Bu benim sorunum için mükemmel bir çözümdü. Teşekkürler! düzenle Sanırım OP olabilir ve başka biri tarafından -1'lenmiş olabilirsin. Oh iyi. Cevabınız için minnettarım ve önemli olan bu, değil mi ;-)
CWSpear

7
İkinci örneğinde olduğu gibi bunun merkezde olmasını nasıl sağlıyorsunuz?
Cameron Martin

Üst öğe bir akışkan genişlikli satır içi blok öğesi olduğunda eklemeliyim. Açıkçası sabit genişlikte olduğunda kolaydır.
Cameron Martin

4
Boşver, istediğim efekti aldım - dabblet.com/gist/e5a78f2d4bf50b6be4d3 . Bu utanç verici ::outsideve ::insidesözde unsurların henüz mevcut olmaması, sadece stil için işaret koymaktan nefret ediyorum, ancak başka bir yolu olduğunu düşünmüyorum.
Cameron Martin

Bu çalışıyor! React ile kullanmak contentiçin :after, satır içi stil veya JSS olarak kullanamazsınız , ancak stilize edilmiş bileşenleri kullanarak iyi çalışır.
Raphael Pinel

26

Biliyorum, bu zaten çözüldü ve pikseller istendi. Ancak, sadece bir şeyler paylaşmak istedim ...

Kısmen altı çizili metin öğeleri, display:tableveya kullanılarak kolayca elde edilebilir.display:inline-block

( Kullanmıyorum display:inline-blockçünkü, evet biliyorsun, garip 4pxboşluk).

Metinsel Öğeler

h1 {
  border-bottom: 1px solid #f00;
  display: table;
}
<h1>Foo is not equal to bar</h1>

Merkezleme , display:tableelemanın ortalanmasını imkansız hale getirir text-align:center.
Şununla çalışalım margin:auto...

h1 {
  border-bottom: 1px solid #f00;
  display: table;
  margin-left: auto;
  margin-right: auto;
}
<h1>Foo is not equal to bar</h1>

Eh , bu güzel, ama değil kısmen .
As bookcasey zaten tanıtılan, sözde elemanları değerinde altın.

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>

Ofset , alt çizgi şimdi sola hizalı. Ortalamak için, sözde öğeyi width( 50% / 2 = 25%) yarısını sağa doğru itmeniz yeterlidir .

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'ın dediği gibi , kullanmak margin:autobazen- marginofseti elle hesaplamaktan daha pratiktir .

Böylece, aşağıdaki widthkombinasyonlardan birini kullanarak alt çizgiyi sola, sağa veya ortaya (akımı bilmeden ) hizalayabiliriz :

  • Sol : margin-right: auto (veya sadece bırakın)
  • Orta :margin: auto
  • Doğru :margin-left: auto

Tam örnek

.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>

Blok Düzeyindeki Öğeler

Bu kolayca benimsenebilir, böylece blok düzeyindeki öğeleri kullanabiliriz. İşin püf noktası, sözde öğelerin yüksekliğini gerçek öğesiyle aynı yüksekliğe ayarlamaktır (basitçe 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>


2
Mükemmel cevap. İçin :afterdaha bir benzeri I margin: 0 autoyerine yaklaşımı margin-left: 25%Eğer matematik yapmak gerek kalmadan beyan herhangi genişliğinde çalışacaktır çünkü.
davidmatas

1
@davidmatas İyi nokta! El ile manuel olarak nasıl konumlandırılacağını netleştirmek için matematiksel yolu kullandım. Bu örnekle herkes onu sola / ortaya / sağa nasıl hizalayacağını anlayabilir. Her neyse, auto- simplificator'ı ekleyeceğim :)
yckart

17

İşte linear-gradientistediğiniz her tür hattı kolayca nerede oluşturabileceğinize dayanan başka bir çözüm . Birden çok arka plan kullanarak birden çok satırınız da olabilir (örneğin her iki tarafta):

İşte yukarıdakiyle aynı şeyi elde etmek için başka bir sözdizimi:

.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>


1
Vay canına ... Saatlerdir "ima edilen" bir kutunun sadece üst sol ve sağ üst köşelerine sahip olmanın bir yolunu bulmak için uğraşıyorum. : önce ve: sonra çok sınırlıydı, nesnenin konumunu bozdu. Bu harika bir çözüm!
Wouter

Bunun neden ve nasıl çalıştığına dair bazı arka plan bilgileri: webfx.com/blog/web-design/background-css-shorthand
Wouter

Kullanılırsa köşe kenarlıklarını border-radius
kırpar

2

Bazı sınırları çizmek için bir ızgara kullandım.

Buraya bakın .

Kod:

<!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>

@ SverriM.Olsen, kişi kodu düzenlediğinden beri yorum geçerliliğini yitirdi
Sagar V

0

CSS, kısmi sınırları desteklemez. Bunu simüle etmek için bitişik bir öğe kullanmanız gerekir.


Veya yukarıdaki cevaplarda gösterildiği gibi tamamen CSS ile yapabileceğiniz ve herhangi bir işaretleme eklemeyeceğiniz bir sözde öğe
OG Sean
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.