border-radius四个属性值在线演示
本帖最后由 马黑黑 于 2024-9-9 12:17 编辑 <br /><br /><style>#mydiv { margin: 30px auto; width: 400px; height: 400px; background: linear-gradient(lightblue,tan); box-sizing: border-box; position: relative; }
#mydiv::before { position: absolute; content: ''; inset: 0; border: 1px dashed gray; }
.markup{ position: absolute; width: 20px; height: 20px; color: #aaa; background: #eee; border-radius: 50%; font: normal 12px / 20px sans-serif; text-align: center; user-select: none; }
.markup:nth-of-type(1) { left: -10px; top: -10px; }
.markup:nth-of-type(2){ left: calc(100% - 10px); top: -10px; }
.markup:nth-of-type(3) { left: calc(100% - 10px); bottom: -10px; }
.markup:nth-of-type(4) { left: -10px; bottom: -10px; }
#rngBox { margin: 20px auto; width: 400px; }
#rngBox p { margin: 6px; display: flex; gap: 8px; }
#msgbox { margin: 20px auto; width: 400px; font-size: 18px; }
#msgbox:active { user-select: all; }
.num { display: inline-block; width: 20px; height: 20px; background: #eee; border-radius: 50%; font: normal 12px / 20px sans-serif; text-align: center; }
.tRed { color: red; }
</style>
<p>【说明】CSS的 <span class="tRed">border-radius</span> 属性用于设置圆角半径,支持单值、双值、三值、四值等,最高支持八个值。本文演示圆角半径四值属性的实时设置。以下矩形四个角上的圆圈数字不是滑块,<span class="num">1</span> <span class="num">2</span> <span class="num">3</span> <span class="num">4</span> 是 border-radius 属性值的次序标记。</p>
<div id="mydiv">
<div class="markup">1</div>
<div class="markup">2</div>
<div class="markup">3</div>
<div class="markup">4</div>
</div>
<div id="rngBox">
<p>
<label for="rng1">左上 : </label>
<input id="rng1" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
<p>
<label for="rng2">右上 : </label>
<input id="rng2" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
<p>
<label for="rng3">右下 : </label>
<input id="rng3" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
<p>
<label for="rng4">左下 : </label>
<input id="rng4" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
</div>
<div id="msgbox"></div>
<script>
var ranges = , v = ;
var outputs = rngBox.querySelectorAll('output');
setBorderRadius = () => {
var data = `${v}% ${v}% ${v}% ${v}%`;
mydiv.style.setProperty('border-radius', data);
msgbox.innerText = 'border-radius: ' + data + ';';
}
ranges.forEach((range,key) => {
range.oninput = () => {
v = 1 * range.value;
outputs.value = range.value;
setBorderRadius();
};
});
setBorderRadius();
</script>
本帖最后由 马黑黑 于 2024-9-9 12:17 编辑
一楼代码:
<style>
#mydiv { margin: 30px auto; width: 400px; height: 400px; background: linear-gradient(lightblue,tan); box-sizing: border-box; position: relative; }
#mydiv::before { position: absolute; content: ''; inset: 0; border: 1px dashed gray; }
.markup{ position: absolute; width: 20px; height: 20px; color: #aaa; background: #eee; border-radius: 50%; font: normal 12px / 20px sans-serif; text-align: center; user-select: none; }
.markup:nth-of-type(1) { left: -10px; top: -10px; }
.markup:nth-of-type(2){ left: calc(100% - 10px); top: -10px; }
.markup:nth-of-type(3) { left: calc(100% - 10px); bottom: -10px; }
.markup:nth-of-type(4) { left: -10px; bottom: -10px; }
#rngBox { margin: 20px auto; width: 400px; }
#rngBox p { margin: 6px; display: flex; gap: 8px; }
#msgbox { margin: 20px auto; width: 400px; font-size: 18px; }
#msgbox:active { user-select: all; }
.num { display: inline-block; width: 20px; height: 20px; background: #eee; border-radius: 50%; font: normal 12px / 20px sans-serif; text-align: center; }
.tRed { color: red; }
</style>
<p>【说明】CSS的 <span class="tRed">border-radius</span> 属性用于设置圆角半径,支持单值、双值、三值、四值等,最高支持八个值。本文演示圆角半径四值属性的实时设置。以下矩形四个角上的圆圈数字不是滑块,<span class="num">1</span> <span class="num">2</span> <span class="num">3</span> <span class="num">4</span> 是 border-radius 属性值的次序标记。</p>
<div id="mydiv">
<div class="markup">1</div>
<div class="markup">2</div>
<div class="markup">3</div>
<div class="markup">4</div>
</div>
<div id="rngBox">
<p>
<label for="rng1">左上 : </label>
<input id="rng1" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
<p>
<label for="rng2">右上 : </label>
<input id="rng2" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
<p>
<label for="rng3">右下 : </label>
<input id="rng3" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
<p>
<label for="rng4">左下 : </label>
<input id="rng4" type="range" name="rng" min="0" max="100" value="0" />
<output>0</output>
</p>
</div>
<div id="msgbox"></div>
<script>
var ranges = , v = ;
var outputs = rngBox.querySelectorAll('output');
setBorderRadius = () => {
var data = `${v}% ${v}% ${v}% ${v}%`;
mydiv.style.setProperty('border-radius', data);
msgbox.innerText = 'border-radius: ' + data + ';';
}
ranges.forEach((range,key) => {
range.oninput = () => {
v = 1 * range.value;
outputs.value = range.value;
setBorderRadius();
};
});
setBorderRadius();
</script>
谢谢老师无私和辛苦! 梦江南 发表于 2024-9-9 15:06
谢谢老师无私和辛苦!
{:4_190:} 一边拉动各个方向的数值,一边观察它们的变化,这样的互动真好{:4_187:} 让4不动,把1和3调大点,然后拉动2,看到了叶子或气球胖胖瘦瘦的变化{:4_173:} 下面和直接显示了调整后的数值,这个工具真好,想要什么样的形状可以这里调了{:4_187:} 直观教学好!谢谢分享! 红影 发表于 2024-9-9 20:44
让4不动,把1和3调大点,然后拉动2,看到了叶子或气球胖胖瘦瘦的变化
四个值的是比较简单的 这个用滑杆实现的。。。通过改数字改形状。。
先前那个用拖动关键点实现的,通过改形状看到数字改变。。
又是不同的实现方式,老师就是最强大脑。
border-radius: 0% 45% 0% 100%;
通过滑杆,很快也实现了飞行器样式{:4_173:} 马黑黑 发表于 2024-9-9 21:55
四个值的是比较简单的
嗯嗯,8个值的比较难理解。 红影 发表于 2024-9-9 23:47
嗯嗯,8个值的比较难理解。
也不算难吧?反斜杠前的是水平方向的,后面的是纵向方向的 花飞飞 发表于 2024-9-9 22:06
border-radius: 0% 45% 0% 100%;
通过滑杆,很快也实现了飞行器样式
厉害 马黑黑 发表于 2024-9-10 11:50
厉害
{:4_173:}厉害的是一楼的。 花飞飞 发表于 2024-9-10 19:59
厉害的是一楼的。
一楼楼矮 马黑黑 发表于 2024-9-10 11:46
也不算难吧?反斜杠前的是水平方向的,后面的是纵向方向的
如果水平方向全是0,纵向方向貌似再怎么设置都没用呢。 红影 发表于 2024-9-10 23:01
如果水平方向全是0,纵向方向貌似再怎么设置都没用呢。
8各值任何一个方向是0,它的相邻圆角都会受到影响。 马黑黑 发表于 2024-9-10 23:07
8各值任何一个方向是0,它的相邻圆角都会受到影响。
我这单核的大脑,还是理解一下四个属性值就行了,八个属性值的联合影响真挺难理解的{:4_173:} 红影 发表于 2024-9-11 10:46
我这单核的大脑,还是理解一下四个属性值就行了,八个属性值的联合影响真挺难理解的
空间能力需要进一步培养