有一个元素element, 实现如下需求:
- 元素e水平垂直居中
- 元素e水平方向与父元素保持10px间距
- 元素e的高度是宽度的一半
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>always-center</title>
</head>
<body>
<div class="text-box">
<h4>有一个元素element, 实现如下需求:</h4>
<ul>
<li>元素e水平垂直居中</li>
<li>元素e水平方向与父元素保持10px间距</li>
<li>元素e的高度是宽度的一半</li>
</ul>
</div>
<style>
html,
body {
height: 100%;
}
.element{
position: absolute;
margin: auto 10px; /* 垂直方向不可定值 */
top: 0;
right: 0;
bottom: 0;
left: 0;
font-size: 24px;
}
.v-padding {
padding-bottom: calc(50% - 10px);
height: 0;
background: #ddd;
}
.v-vw{
height: calc( 50vw - 10px - ( 100vh - 100% ));
background: #ccc;
}
.none{
display: none;
}
.toggle{
position: fixed;
z-index: 1;
top: 170px;
left: 150px;
}
.text-box {
width: 400px;
display: inline-block;
font-size: 20px;
position: relative;
margin-bottom: 0;
}
</style>
<button id="toggle" class="toggle"> toggle element </button>
<div class="element none"> </div>
<script>
const toggle = document.getElementById('toggle');
const cycles = [ 'v-padding', 'v-vw', 'none'];
const element = document.querySelector('.element');
toggle.addEventListener('click', ()=>{
const current = cycles.shift();
element.className = 'element '+current;
element.innerText = current.replace('v-', '');
cycles.push(current);
});
</script>
<style>
.padding-box {
width: 300px;
background: #BBB;
}
.padding-box .padding {
padding: 10%;
background: blue;
}
</style>
<div class="padding-box">
<p class="padding">
padding 使用百分比时, 相对于父容器宽度进行计算。
</p>
<input type="range" name="padding" id="padding"> 调整父级元素宽度
</div>
<script>
const r = document.getElementById('padding');
const pbox = document.querySelector('.padding-box');
r.addEventListener('input', () => {
pbox.setAttribute('style', 'width: ' + (600 * r.value / 100) + 'px;');
});
</script>
</body>
</html>