请教BS是如何根据屏幕尺寸自动添加或删除一些css类,以达到自适应的目的的?

如题,我想在项目的某个页面里做一些自适应的效果,如屏幕宽度大于768时,
<div class="col-md-5"></div>,
但是在移动端,宽度小于768时,我想自动把这个div改成 <div class="sm-div"></div>
sm-div是我自定义的一个css类
请教该如何做到。我看到很多bs组件都是用类似的方法做到的。
已邀请:

rew1011

赞同来自:

媒体查询,多个媒体查询

rew1011

赞同来自:

自己写个媒体查询
@media (max-width: 768px) { 把你sm-div的代码扔进来 }

Rirai

赞同来自:

哦,这个方法我知道,但是这个没法动态加载和删除啊。
我想动态修改div的类。

rew1011

赞同来自:

难道你想js监听宽度的变化,再去动态修改某个div引用某个class?

rew1011

赞同来自:

对class的动态加载和删除属于js控制dom结构范畴,不属于css框架范围,而bootstrap只是个css框架而已,其匹配的js均为插件。我觉得你应该理一理思路了。

Rirai

赞同来自:

是的,我是想bs有没有统一的接口,在屏幕发生变化时,调用这个接口,进行某些css操作。

Rirai

赞同来自:

光用bootstrap搭搭积木好像难度不大,但是真的要深入bootstrap,做一些改造,难度还是很大的。
找了一些资料,才发现bootstrap好像用了统一的插件media query来做自适应的。(可能有误,好像某些地方提到了,我没有深入的看代码)
最终我用了触发消息貌似解决了问题(还没有最终确定):大概的方法是
$("#myScrollspy").on('hidden.bs.offcanvas',function(){
$("#divId").css("xxxxxxxxx");
console.log("menu is hide");
});

rew1011

赞同来自:

media query就是媒体查询啊,是css3自带的,和bootstrap没父子关系。
它很像监听,达到某个条件了,就去执行相应的css。
你这代码不就是隐藏了菜单的时候去改变了css样式么?

rew1011

赞同来自:

越来越不明白你到底要干什么了。
之前你说屏幕发生变化时去改变css,那么我就告诉了你媒体查询即可,可你非要动态的调用class,那么只能js。
现在又说发现bootstrap用了统一的插件media query,大哥,这不就是媒体查询吗?还有你那代码的监听事件,和你描述的问题完全是两回事儿啊,完全搞不懂你在说什么了。

Rirai

赞同来自:

不好意思,有点乱。(Media Query我搞错了,不是一个插件)
设计需求是这个样子滴:
电脑屏幕上使用 affix+nav导航(大致效果如下图)
1.png


手机屏幕上(nav导航隐藏)在右侧出现一个navbar-toggle的按钮,点击这个按钮,则在左侧把上述的nav导航以侧栏的方式显示。(大致效果如下图)

2.png


其他的一些要求就是滚动监听之类的。
在bootstrap库里和网上都没有找到十分合意的组件
所以只好手工拼接了一个。

bootstrap自带的affix+nav导航,不变,照抄教程就搞定了。
navbar-toggle也搞定了,关键和侧栏的关系一直搞不好(用了第三方的Bootstrap Offcanvas),
因为描画部分没有用Bootstrap Offcanvas,用了自己上述的nav导航,所以需要动态的用css来美化,和一些附加操作。

现在大体搞定了,方法是
1,用了offcanvas提供的触发消息,进行css修改,如
$("#myScrollspy").on('hidden.bs.offcanvas',function(){
$("#divId").css("xxxxxxxxx");
console.log("menu is hide");
});
2,看懂了一部分offcanvas的代码,直接在底层上修改了一些代码,才最终搞定。
关键自己写组件的水平不够,说不定自己从头写一个不太通用的组件也不是很难。
(说不定比看懂他人代码,改造要简单些)

要回复问题请先登录注册