패딩에만 배경색을 추가 할 수 있습니까?


88

테두리 및 패딩 및 해당 상자의 배경색을 포함하는 헤더 상자가 있습니다. 테두리 뒤의 패딩 된 영역에 대해서만 배경색을 변경 한 다음 나머지 너비에 대해 동일한 배경색을 변경할 수 있습니까 (예 : 주어진 코드에서 회색) ?

패딩 된 배경색을 원하는 코드의 꼬집음 :

nav {
    margin:0px auto;
    width:100%;
    height:50px;
    background-color:grey;
    float:left;
    padding:10px;
    border:2px solid red;
}

3
나는 그렇게 생각하지 않습니다,하지만 난 줄 사랑을 증명 잘못에. (요소를 중첩해야한다고 생각합니다.)
David는 Monica를 복원한다고 말합니다

아니, 맞아 데이비드.
Eli Gassert 2013 년

2
@DavidThomas 나도 똑같이 바란다! 볼 수 있습니다 ..
파반 Nadig

EliGassert umm .. 그러면 내부에 다른 색상의 상자를 넣을 수 있습니까?
Pavan Nadig

1
내 대답을 확인하십시오 IT CAN BE DONE.
Muhammad Umer 2013-08-24

답변:


40

순수한 CSS의 또 다른 옵션은 다음과 같습니다.

nav {
    margin: 0px auto;
    width: 100%;
    height: 50px;
    background-color: white;
    float: left;
    padding: 10px;
    border: 2px solid red;
    position: relative;
    z-index: 10;
}

nav:after {
    background-color: grey;
    content: '';
    display: block;
    position: absolute;
    top: 10px;
    left: 10px;
    right: 10px;
    bottom: 10px;
    z-index: -1;
}

여기에서 데모


당신의 의사 클래스 요소는 오른쪽에있는 부모 상자를 넘어갑니다.width: 100%;
Simon

이제 오른쪽의 간격이 너무 큽니다. 너비를 95 %로 설정하는 것은 특히 패딩이 변경되는 경우 너무 안정적이지 않습니다. ;)
Simon

@Simon u는 왜 코드를 넣었는지 설명해 주시겠습니까? 코드를 position:relative;배치하지 않았 으면 화면에 나타나지 않습니다! ..하지만 어떻게 작동합니까?
Pavan Nadig 2013 년

2
@Pavan Nadig 상대적인 위치는 z- 인덱스 값을 추가하여 적용 할 수 있습니다. Z- 색인은 위치가 지정된 요소에서만 작동합니다.
gotohales

그게 최선의 설명 생각 여기
사이먼

80

나는 이것이 실제로 패딩을 설정할 필요가없는 진정한 해결책이라는 점에 대해 유감입니다.

http://jsfiddle.net/techsin/TyXRY/1/

내가 뭘 한거지...

  • 시작 및 끝 색상이 모두 하나 인 배경에 두 개의 그라디언트를 적용했습니다. 단색을 사용하는 대신. 한 배경에 두 가지 단색을 사용할 수 없기 때문입니다.
  • 그런 다음 각각 다른 background-clip 속성을 적용했습니다.
  • 따라서 한 색상을 콘텐츠 상자로 확장하고 다른 색상을 테두리로 확장하여 패딩을 드러냅니다.

내가 스스로에게 그렇게 말하면 영리하다.

div {
    padding: 35px;
    background-image:
      linear-gradient(to bottom,
        rgba(240, 255, 40, 1) 0%,
        rgba(240, 255, 40, 1) 100%),
      linear-gradient(to bottom,
        rgba(240, 40, 40, 1) 0%,
        rgba(240, 40, 40, 1) 100%);
    background-clip: content-box, padding-box;
}

6
매우 영리한. 나는 바이올린을 약간 정리했습니다 : jsfiddle.net/ilancopelyn/n1ax4qvt
Ilan

지금은 jsfiddle.net/TyXRY/123(123 )에 있지만 그들이 무엇을하고 있는지, 누가하고 있는지는 분명하지 않습니다.
Muhammad Umer

나는 이것을 좋아한다. 안타깝게도 중간 (예 : 콘텐츠 상자)이 투명 할 수없고 기본 (예 : 본문) 색상에 구멍을 뚫을 수 없습니다. 이것을 시도했을 때 Chrome에서 외부 그라디언트가 보입니다.
MSC

1
관대 한! 전환을 첨부하는 방법이 있습니까? 시도했지만 성공하지 못했습니다.
Garavani 2015-06-17

transition: all 0.3s 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
Benny K

44

background-clipbox-shadow속성을 사용합니다 .

1) 설정 background-clip: content-box-패딩과 테두리를 모두 덮는 대신 배경을 콘텐츠 자체로만 제한합니다.

2) box-shadow패딩과 동일한 값으로 설정된 스프레드 반경으로 내부 를 추가하십시오 .

따라서 패딩이 10px-설정이라고 가정하면 box-shadow: inset 0 0 0 10px lightGreen패딩 영역 만 연한 녹색이됩니다.

Codepen 데모

nav {
  width: 80%;
  height: 50px;
  background-color: gray;
  float: left;
  padding: 10px; /* 10px padding */
  border: 2px solid red;
  background-clip: content-box; /* <---- */
  box-shadow: inset 0 0 0 10px lightGreen; /* <-- 10px spread radius */
}
ul {
  list-style: none;
}
li {
  display: inline-block;
}
<h2>The light green background color shows the padding of the element</h2>
<nav>
  <ul>
    <li><a href="index.html">Home</a>
    </li>
    <li><a href="/about/">About</a>
    </li>
    <li><a href="/blog/">Blog</a>
    </li>
  </ul>
</nav>

이 기술을 다루는 철저한 튜토리얼은 이 훌륭한 css-tricks 게시물을 참조하십시오.


무슨 0 0 0뜻이야?
Nakilon 2016 년

1
@Nakilon box-shadow에는 네 가지 속성이 있습니다. 0 0 0세트는 h-shadow v-shadowblur0 수평 그림자 그림자 수직 및 블러 거리가이 구현에서 필요로하지 않는된다. .에 inset대해 안쪽 ( )으로 가는 단색 그림자 일뿐 입니다 10px.
trlkly

간단하면서도 효과적입니다!
timgeb

9

해당 효과에 배경 그라데이션을 사용할 수 있습니다. 예를 들어 다음 줄을 추가하십시오 (공급 업체 접두사를 사용해야하기 때문에 코드가 너무 많음).

background-image: 
    -moz-linear-gradient(top, #000 10px, transparent 10px),
    -moz-linear-gradient(bottom, #000 10px, transparent 10px),
    -moz-linear-gradient(left, #000 10px, transparent 10px),
    -moz-linear-gradient(right, #000 10px, transparent 10px);
background-image: 
    -o-linear-gradient(top, #000 10px, transparent 10px),
    -o-linear-gradient(bottom, #000 10px, transparent 10px),
    -o-linear-gradient(left, #000 10px, transparent 10px),
    -o-linear-gradient(right, #000 10px, transparent 10px);
background-image: 
    -webkit-linear-gradient(top, #000 10px, transparent 10px),
    -webkit-linear-gradient(bottom, #000 10px, transparent 10px),
    -webkit-linear-gradient(left, #000 10px, transparent 10px),
    -webkit-linear-gradient(right, #000 10px, transparent 10px);
background-image: 
    linear-gradient(top, #000 10px, transparent 10px),
    linear-gradient(bottom, #000 10px, transparent 10px),
    linear-gradient(left, #000 10px, transparent 10px),
    linear-gradient(right, #000 10px, transparent 10px);

불필요한 마크 업이 필요하지 않습니다.

이중 테두리를 원하면 테두리와 패딩 대신 테두리와 테두리를 사용할 수 있습니다.

의사 요소를 사용하여 원하는 효과를 얻을 수도 있지만 반대하는 것이 좋습니다. 유사 요소는 CSS가 제공하는 매우 강력한 도구입니다. 이와 같은 것에 "낭비"하면 아마도 다른 곳에서 놓칠 것입니다.

다른 방법이없는 경우에만 의사 요소를 사용합니다. 나쁘기 때문이 아니라 정반대입니다. 조커를 낭비하고 싶지 않기 때문입니다.


1
IE9를 무시할 수 있다면 그래디언트를 사용하여이를 수행 할 수 있지만 가상 클래스는 최소한 IE8까지 지원됩니다.
Simon

사실입니다. 그러나 그 사례가 많은 경우 css3pie.com을 사용할 가치가있을 수 있습니다
dave

1
폐기물이란 무엇입니까? 의사 요소는 제한된 시간으로 사용하도록 제한됩니까?
Anwar

예, 제한되어 있습니다. 각 요소에 대해 2 개가 있습니다 (1x :: before, 1x :: after).
데이브

6

대답은 가능한 모든 해결책을 말했습니다

BOX-SHADOW로 하나 더 있습니다

여기는 JSFIDDLE입니다

및 코드

nav {
    margin:0px auto;
    width:100%;
    height:50px;
    background-color:grey;
    float:left;
    padding:10px;
    border:2px solid red;
    box-shadow: 0 0 0 10px blue inset;
}

IE9에서도 지원하므로 그래디언트 솔루션보다 낫습니다. 더 많은 지원을 위해 적절한 접두사를 추가하십시오.

IE8은 그것을 지원하지 않습니다.



2

이것은 IE8 / 9에서도 작동하는 적절한 CSS 솔루션이 될 것입니다 (IE8 with html5shiv ofcourse) : codepen

nav {
  margin:0px auto;
  height:50px;
  background-color:gray;
  padding:10px;
  border:2px solid red;
  position: relative;
  color: white;
  z-index: 1;
}

nav:after {
  content: '';
  background: black;
  display: block;
  position: absolute;
  margin: 10px;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: -1;
}

1

이를 수행하는 정확한 기능은 없습니다.

내부에 다른 요소를 감싸지 않고 테두리를 상자 그림자로 바꾸고 패딩을 테두리로 바꿀 수 있습니다. 그러나 상자 그림자는 요소의 크기에 추가되지 않습니다.

jsfiddle이 정말 느립니다. 그렇지 않으면 예제를 추가하겠습니다.


0

헤더를 다른 div로 감싸고 테두리로 재생합니다.

<div class="header-border"><div class="header-real">

    <p>Foo</p>

</div></div>

CSS :

.header-border { border: 2px solid #000000; }
.header-real { border: 10px solid #003399; background: #cccccc; padding: 10px; }

그건 멋지네요 .. 그건 그렇고, 전체 상자를으로 사용 했으므로 <nav>어떻게 클래스를 추가 할 수 있습니까?
Pavan Nadig 2013 년

나는 <nav>수업을 가질 수 있다고 믿습니다 . @mookamafoob 답변을 살펴보십시오. 브라우저 지원이 걱정되기 때문에 실제로 그렇게하지 않을 것입니다. 그러나 HTML5 / CSS3를 선호한다면 그렇게하는 방법입니다.
rlatief 2013 년

0

패딩에 대해 다음과 같이 div를 수행 할 수 있습니다.

<div id= "paddingOne">
</div>
<div id= "paddingTwo">
</div>

#paddingOne {
width: 100;
length: 100;
background-color: #000000;
margin: 0;
z-index: 2;
}
#paddingTwo {
width: 200;
length: 200;
background-color: #ffffff;
margin: 0;
z-index: 3;

너비, 길이, 배경색, 여백 및 Z- 색인은 물론 다를 수 있지만 패딩을 덮으려면 Z- 색인이 0보다 높아야 패딩 위에 놓이게됩니다. 위치 등을 조작하여 방향을 변경할 수 있습니다. 도움이 되었기를 바랍니다.

추신 : div는 html이고 #paddingOne 및 #paddingTwo는 CSS입니다 (누구도 얻지 못한 경우 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.