有没有比在本例中使用matchMedia更聪明的方法来重新排列页面元素
Is there a smarter way to rearrange page elements than using matchMedia for this example?
我创建了以下页面布局,但它严重依赖javascript。我试着想其他更简单的方法来实现这一点,但无法想出任何方法。
只是想知道是否有人有什么聪明的想法可以在没有javascript的情况下实现这种布局?
var hero = document.getElementById ('hero');
var aside = document.getElementById ('aside');
var main = document.getElementById ('main');
var smallMql = window.matchMedia('(max-width: 739px)');
var mediumMql = window.matchMedia('(min-width: 740px) and (max-width: 979px)');
var largeMql = window.matchMedia('(min-width: 980px)');
function drawSmallGrid(mql) {
if (mql.matches) {
aside.setAttribute('style', 'margin-top: 0');
}
}
function drawMediumGrid(mql) {
if (mql.matches) {
var mainHeight = main.clientHeight;
aside.setAttribute('style', 'margin-top: -' + mainHeight + 'px');
}
}
function drawLargeGrid (mql) {
if (mql.matches) {
var mainHeight = main.clientHeight;
var heroHeight = hero.clientHeight;
var totalHeight = mainHeight + heroHeight;
aside.setAttribute('style', 'margin-top: -' + totalHeight + 'px');
}
}
smallMql.addListener(drawSmallGrid);
mediumMql.addListener(drawMediumGrid);
largeMql.addListener(drawLargeGrid);
drawSmallGrid(smallMql);
drawMediumGrid(mediumMql);
drawLargeGrid(largeMql);
/**
* Grid
*/
.hero,
.main {
box-sizing: border-box;
}
/* Content faking */
.hero .module {background:aqua;}
.main .module {background:red;}
.aside .module {background:orange}
.hero .module,
.main .module {
min-height: 200px;
}
.aside .module {
min-height: 400px;
}
/* Grid layout */
.hero,
.main,
.aside {
padding-left: 15px;
padding-right: 15px;
}
@media (min-width: 740px) {
.main {
margin-right: 330px;
max-width: 70%;
}
.aside {
width: 300px;
float: right;
}
}
<div id="hero" class="hero"><div class="module">hero</div></div>
<div id="main" class="main"><div class="module">main</div></div>
<div id="aside" class="aside"><div class="module">aside</div></div>
我研究了flexbox,但它对我的布局和IE10+来说太复杂了。事实上,我还记得css的calc值,它是IE9+,它非常有效,根本没有javascript:
/**
* Grid
*/
.hero,
.main {
box-sizing: border-box;
}
/* Content faking */
.module { padding: 10px; }
.hero .module { background: aqua; }
.main .module { background: red; }
.aside .module { background: orange; }
.hero .module,
.main .module {
min-height: 200px;
}
.aside .module {
min-height: 400px;
}
@media (min-width: 740px) {
.module:after {
display: inline;
content: ' 740px+';
font-style: italic;
}
.main {
float: left;
width: calc(100% - 330px);
}
.aside {
float: right;
width: 300px;
}
}
@media (min-width: 980px) {
.module:after {
display: inline;
content: ' 980px+';
font-style: italic;
}
.container {
width: calc(100% - 330px);
float: left;
}
.main {
float: none;
width: 100%;
}
}
<div class="container">
<div id="hero" class="hero"><div class="module">hero</div></div>
<div id="main" class="main"><div class="module">main</div></div>
</div>
<div id="aside" class="aside"><div class="module">aside</div></div>
相关文章:
- 如何删除多行HTML排列中的空白
- 重新排列HTML元素的顺序并更改内容
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- 从数组中删除重复条目,并在javascript中按顺序排列
- 使用CSS从下到上排列元素
- 我可以't在Divs中获得3个twitter小部件,以便并排排列
- Javascript从数组中随机选择并按字母顺序排列
- 如何在php中按元素按字母顺序排列json文件
- Javascript/jQuery:如何从数组的项中获取排列
- 如何在方向更改时重新调整/排列布局(Apache Cordova)
- 有没有比在本例中使用matchMedia更聪明的方法来重新排列页面元素
- 如何根据 js 中每个单词的第 n 个字母按字母顺序排列列表
- 响应式列表,可在浏览器缩小时重新排列
- Javascript将生日按数组顺序排列
- 比较两个JSON数组并重新排列新的JSON数组格式
- 允许用户在HTML页面上重新排列排列的图像
- 阵列排列排列
- Javascript为jquery选择器重新排列数组
- 砌体重新排列,同时仍然调整大小
- 允许用户重新排列 Django 管理站点中的条目,以及如何存储新的自定义顺序以在页面刷新中幸存下来