我在工作中使用css Grid已经有几个月了,我非常喜欢它在页面布局时给我的灵活性。这么长时间以来,我们一直没有一个真正的网格布局解决方案——用浮动和flexbox总是有各种各样的限制。但现在,我真的无法想象没有Grid的CSS!
最近我还注意到的一件事就是CSS自定义属性。CSS自定义属性的工作方式有点像SASS和其他预处理器中的变量,主要的区别在于其它方法都是在浏览器中编译后生成,还是原本的CSS写法。CSS自定义属性是真正的动态变量,可以在样式表中或使用javascript即时更新,这使得它们具有更多的可能性。如果你熟悉JavaScript,我喜欢把预处理器变量和CSS自定义属性之间的区别想象成与const和let之间的区别相似——它们都有不同的用途。
CSS自定义属性可以方便的实现很多功能(例如主题变化)。最近我一直在尝试利用CSS自定义属性和CSS网格的组合能实现什么神奇的效果,我需要在不同的断点处重新定义grid-template-rows和grid-template-columns属性。下面的代码中有一个例子,我使用SASS变量定义了页面在不同的宽度下不同的列宽值,这些值将传递到grid-template-rows属性中。我对grid-gap属性也做了同样的操作,这样页面宽度不同时元素之间的间距也是不同的:
$wrapper: 1200px;
$col: 1fr;
$gutter: 20px;
$wrapper-l: 90%;
$col-l: calc((1000px - (13 * 40px)) / 12);
$gutter-l: 40px;
$col-xl: calc((1200px - (13 * 50px)) / 12);
$gutter-xl: 50px;
body {
background-color: lighten(grey, 30%);
}
.wrapper {
max-width: $wrapper;
margin: 20px auto;
@media (min-width: 1300px) {
max-width: $wrapper-l;
}
}
.grid {
display: grid;
padding: $gutter;
grid-template-columns: 1fr repeat(12, $col) 1fr;
grid-template-rows: repeat(2, minmax(150px, auto));
grid-gap: $gutter;
border: 1px solid grey;
background: white;
width: auto;
@media (min-width: 1300px) {
grid-template-columns: 1fr repeat(12, $col-l) 1fr;
grid-gap: $gutter-l;
padding: $col-l;
}
@media (min-width: 1500px) {
grid-template-columns: 1fr repeat(12, $col-xl) 1fr;
grid-gap: $gutter-xl;
padding: $col-xl;
}
}
.grid__item {
border: 1px solid blue;
}
.grid__item--heading {
grid-column: 2 / 11;
}
就如你所看到的,基本上必须在媒体查询中再次写出整个代码块来改变样式,因为变量一旦定义就固定了。(我当然可以使用mixin,但是最终效果是一样的——一大块代码。)
使用CSS自定义属性,可以减少代码量,因为我只需更新媒体查询中的变量,浏览器就会重新计算网格。十行(sass)代码可能看起来不是一个巨大的节省,但代码的可读性要高得多,因为不必在好几个地方添加媒体查询来处理我们的新变量,我只需在该组件的代码开头声明它们,并且无需担心是否已替换了正在使用的哪个值:
:root {
--wrapper: 1200px;
--col: 1fr;
--gutter: 20px;
@media (min-width: 1300px) {
--wrapper: 90%;
--col: calc((1000px - (13 * 40px)) / 12);
--gutter: 40px;
}
@media (min-width: 1500px) {
--wrapper: 90%;
--col: calc((1200px - (13 * 50px)) / 12);
--gutter: 50px;
}
}
body {
background-color: lighten(grey, 30%);
}
.wrapper {
max-width: var(--wrapper);
margin: 20px auto;
}
.grid {
display: grid;
padding: var(--gutter);
grid-template-columns: 1fr repeat(12, var(--col)) 1fr;
grid-template-rows: repeat(2, minmax(150px, auto));
grid-gap: var(--gutter);
border: 1px solid grey;
background: white;
width: auto;
}
.grid__item {
border: 1px solid blue;
}
.grid__item--heading {
grid-column: 2 / 11;
}
.grid__item--body {
grid-column: 2 / 8;
grid-row: 2 / span 1;
}
.grid__item--media {
background: hotPink;
grid-column: 11 / 14;
grid-row: 1 / span 2;
}
我发现使用CSS Grid的一个特点是,语法非常冗长,而且并不容易快速、轻松地看到正在发生的事情,特别是在复杂的网格中。但是在这个例子中,使用CSS自定义属性,可以为网格项的大小和坐标设置变量,并且只写一次grid-column和grid-row属性。对我来说,这比每次都写出完整的属性要清楚得多,而且很容易一目了然地看到网格项的位置。
这里有一个随机动态改变自定义变量的DEMO,在这个示例中,我使用javascript循环网格项,并在每次单击按钮时使用随机值更新变量。没有添加类或额外的CSS。
在这个的示例DEMO中,使用用户输入的值动态更改网格项。这里要更新的只是x和y坐标的三个变量以及网格项的大小。太多的可能性了!
浏览器支持
目前,全球88%的浏览器都支持CSS自定义属性——Internet Explorer 11及以下版本是明显的例外。这与对CSS Grid网格布局的支持大致相同,这意味着要使用特性查询来区分支持与不支持的浏览器。
可以这样使用@supports声明来测试对css自定义属性的支持:
@supports(--css: variables) {
.my-div {
--size: 2;
--posX: 3;
grid-column: var('--posX') / span var('--size');
}
}
原文来自:https://segmentfault.com/a/1190000019259037
翻译来源:https://codepen.io/michellebarker/post/super-powered-layouts-with-css-variables-css-gr
css两端对齐,通过margin负值、justify、space-between、column-count等多种方式来实现css的两端对齐。
flex布局(Flexible Box)是对界面css盒模型的一个优化,适应不同尺寸的屏幕,被定义flex的容器可以控制子元素的排列方向和大小,能够用更简单清晰的代码来完成复杂的布局。
在我们的实际开发中,经常会遇到页面中需要悬浮效果,本文将介绍通过fixed的实现,以及通过原生Js实现滚动到一定位置,实现div的悬浮
CSS中Grid是一种二维网格式布局方式,Grid是为了解决二维布局问题而创建的CSS模块。使用Gird的好处,Gird在浏览器的兼容性,Grid布局的示例源码...
flex常用布局:经典的上-中-下布局。在上-中-下布局的基础上,加了左侧定宽 sidebar。左边是定宽 sidebar,右边是上-中-下布局。还是上-中-下布局,区别是 header 固定在顶部,不会随着页面滚动。左侧 sidebar 固定在左侧且与视窗同高,当内容超出视窗高度时,在 sidebar 内部出现滚动条。
本文中,所有的图形都是在单个标签内实现的,大量使用了 CSS3 中的 ::before 、::after 伪元素,transparent 、border,多重线性与径向渐变,多重内外阴影,如果你的效果不尽人意,请尝试在 Chrome 浏览器下预览。
html实现用时间点来展示事件发生点来代替用table展示一条条数据,能够给人清晰、一目了然能够看清事情发生的过程,UI页面也显示的那么清晰。如何用css+html做出时间轴展示事件点的?
这篇文章主要整理一些关于基于jquery,实现横向/纵向时间轴的插件推荐:jquery.jqtimeline插件、timeline.js插件、Timeglider.js插件、Melon HTML5 、jQuery Timelinr、Timeline Porfolio
css可以通过为元素设置一个position属性值,position定位是指定位置的定位,以下为常用的几种:static(静态定位)、relative定位(相对定位)、absolute定位(绝对定位)、fixed(固定定位)、inherit定位
css圣杯布局思路:外面一个大div,里面三个小div(都是浮动)。实现左右两栏宽度固定,中间宽度自适应。中间栏优先渲染。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!