border-image-slice
CSS
property divides the image specified by
border-image-source
into regions. These regions form the components of an element's
border image
.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
The slicing process creates nine regions in total: four corners, four edges, and a middle region. Four slice lines, set a given distance from their respective sides, control the size of the regions.
The above diagram illustrates the location of each region.
fill
有设置。
border-image-repeat
,
border-image-width
,和
border-image-outset
properties determine how these regions are used to form the final border image.
/* All sides */ border-image-slice: 30%; /* vertical | horizontal */ border-image-slice: 10% 30%; /* top | horizontal | bottom */ border-image-slice: 30 30% 45; /* top | right | bottom | left */ border-image-slice: 7 12 14 5; /* Using the `fill` keyword */ border-image-slice: 10% fill 7 12; /* Global values */ border-image-slice: inherit; border-image-slice: initial; border-image-slice: unset;
border-image-slice
property may be specified using one to four
<number-percentage>
values to represent the position of each image slice. Negative values are invalid; values greater than their corresponding dimension are clamped to
100%
.
可选
fill
value, if used, can be placed anywhere in the declaration.
<number>
<percentage>
Represents an edge offset as a percentage of the source image's size: the width of the image for horizontal offsets, the height for vertical offsets.
fill
background
. Its width and height are sized to match the top and left image regions, respectively.
| 初始值 |
100%
|
|---|---|
| 适用于 |
all elements, except internal table elements when
border-collapse
is
collapse
. It also applies to
::first-letter
.
|
| 继承 | no |
| 百分比 | refer to the size of the border image |
| 计算值 |
one to four percentage(s) (as specified) or absolute length(s), plus the keyword
fill
if specified
|
| 动画类型 | by computed value type |
<number-percentage>{1,4} && fill?where
<number-percentage> = <number> | <percentage>
The folowing example shows a simple
<div>
with a border image set on it. The source image for the borders is as follows:
The diamonds are 30px across, therefore setting 30 pixels as the value for both
border-width
and
border-image-slice
will get you complete and fairly crisp diamonds in your border:
border-width: 30px; border-image-slice: 30;
These are the default values we have used in this example. However, we have also provided two sliders to allow you to dynamically change the values of the above two properties, allowing you to appreciate the effect they have:
border-image-slice
Changes the size of the image slice sampled for use in each border and border corner (and the content area, if the
fill
keyword is used) — varying this away from 30 causes the border to look somewhat irregular, but can have some interesting effects.
border-width
: Changes the width of the border. The sampled image size is scaled to fit inside the border, which means that if the width is bigger than the slice, the image can start to look somewhat pixellated (unless of course you use an SVG image).
<div class="wrapper">
<div></div>
</div>
<ul>
<li>
<label for="width">slide to adjust <code>border-width</code></label>
<input type="range" min="10" max="45" id="width">
<output id="width-output">30px</output>
</li>
<li>
<label for="slice">slide to adjust <code>border-image-slice</code></label>
<input type="range" min="10" max="45" id="slice">
<output id="slice-output">30</output>
</li>
</ul>
.wrapper {
width: 400px;
height: 300px;
}
div > div {
width: 300px;
height: 200px;
border-width: 30px;
border-style: solid;
border-image: url(https://interactive-examples.mdn.mozilla.net/media/examples/border-diamonds.png);
border-image-slice: 30;
border-image-repeat: round;
}
li {
display: flex;
place-content: center;
}
const widthSlider = document.getElementById('width');
const sliceSlider = document.getElementById('slice');
const widthOutput = document.getElementById('width-output');
const sliceOutput = document.getElementById('slice-output');
const divElem = document.querySelector('div > div');
widthSlider.addEventListener('input', () => {
const newValue = widthSlider.value + 'px';
divElem.style.borderWidth = newValue;
widthOutput.textContent = newValue;
})
sliceSlider.addEventListener('input', () => {
const newValue = sliceSlider.value;
divElem.style.borderImageSlice = newValue;
sliceOutput.textContent = newValue;
})
| 规范 | 状态 | 注释 |
|---|---|---|
|
CSS Backgrounds and Borders Module Level 3
The definition of 'border-image-slice' in that specification. |
候选推荐 | Initial defintion |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
border-image-slice
|
Chrome 完整支持 15 | Edge 完整支持 12 |
Firefox
完整支持
15
注意事项
|
IE 完整支持 11 | Opera 完整支持 15 | Safari 完整支持 6 | WebView Android 完整支持 ≤37 | Chrome Android 完整支持 18 |
Firefox Android
完整支持
15
注意事项
|
Opera Android 完整支持 14 | Safari iOS 完整支持 6 | Samsung Internet Android 完整支持 1.0 |
完整支持
见实现注意事项。
要求使用供应商前缀或不同名称。
background
background-attachment
background-clip
background-color
background-image
background-origin
background-position
background-position-x
background-position-y
background-repeat
background-size
border
border-bottom
border-bottom-color
border-bottom-left-radius
border-bottom-right-radius
border-bottom-style
border-bottom-width
border-color
border-image
border-image-outset
border-image-repeat
border-image-slice
border-image-source
border-image-width
border-left
border-left-color
border-left-style
border-left-width
border-radius
border-right
border-right-color
border-right-style
border-right-width
border-style
border-top
border-top-color
border-top-left-radius
border-top-right-radius
border-top-style
border-top-width
border-width
box-shadow