有办法去掉从父级元素继承下来的 CSS 样式吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wincat
V2EX    CSS

有办法去掉从父级元素继承下来的 CSS 样式吗?

  •  
  •   wincat 2015-01-30 12:02:06 +08:00 57100 次点击
    这是一个创建于 3908 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个页面使用了 Bootstrap,父级用了container类,我想让里面的一个div宽度扩展到屏幕一样,肿莫破?

    第 1 条附言    2015-01-30 14:18:20 +08:00
    
    56 条回复    2015-01-31 11:00:55 +08:00
    iamcho
        1
    iamcho  
       2015-01-30 12:11:28 +08:00
    在div里给它加上一个类,给新加的类写样式
    Biwood
        2
    Biwood  
       2015-01-30 12:12:41 +08:00   1
    想办法使div脱离文档,然后宽度设为100%
    yushiro
        3
    yushiro  
       2015-01-30 12:13:30 +08:00 via iPhone   1
    用!important覆盖继承的样式
    kisshere
        4
    kisshere  
       2015-01-30 12:15:45 +08:00 via Android
    在HTML里面写style=""
    superbear
        5
    superbear  
       2015-01-30 12:19:18 +08:00
    离他越近,越靠后的类优先级越高,可以覆盖
    jarlyyn
        6
    jarlyyn  
       2015-01-30 12:22:52 +08:00
    重写样式。放在更靠后的位置。加入更多的类限制。

    不过觉得你的问题和是否继承无关的样子。
    jarlyyn
        7
    jarlyyn  
       2015-01-30 12:23:28 +08:00
    @kisshere 这个没用吧?
    scarlex
        8
    scarlex  
       2015-01-30 12:32:48 +08:00
    @jarlyyn 有用,html 里面的的 style 优先级最高
    iinterest
        9
    iinterest  
       2015-01-30 12:40:21 +08:00
    不能去掉,但可以写个新的覆盖,覆盖规则可以搜索『CSS 特殊性』
    cxshun
        10
    cxshun  
       2015-01-30 12:40:44 +08:00
    @jarlyyn 有用的,style优先级最高。
    learnshare
        11
    learnshare  
       2015-01-30 12:40:45 +08:00
    你这个问题不是改 CSS 来解决,是需要改 HTML 结构解决
    jarlyyn
        12
    jarlyyn  
       2015-01-30 12:53:54 +08:00 via Android
    @cxshun 可以去掉所有样式?
    66beta
        13
    66beta  
       2015-01-30 12:57:57 +08:00
    既然使用BS,就遵循它的设计理念,改HTML结构吧

    懒就写CSS覆盖
    cxshun
        14
    cxshun  
       2015-01-30 12:59:33 +08:00
    @jarlyyn 这个当然不行,只能覆盖你配置的那个样式。其实上就类似了你在CSS块里面写的!import这种。
    loading
        15
    loading  
       2015-01-30 13:11:36 +08:00
    加上 id ,在css 里写就行,id 看上去比写 style 那个些。。。
    momou
        16
    momou  
       2015-01-30 13:18:03 +08:00
    这样如何?
    .container>row{
    width: 166.67%;
    margin-left: -33.33%;
    }
    juicy
        17
    juicy  
       2015-01-30 13:19:00 +08:00
    css的强行继承真是广为诟病,难怪facebook那些人一直在抱怨css是个让人头疼的东西~
    learnshare
        18
    learnshare  
       2015-01-30 13:20:34 +08:00
    用 CSS 解决这个问题,就是在挖更大的坑。不应该用 Bug 解决 Bug
    wincat
        19
    wincat  
    OP
       2015-01-30 13:24:57 +08:00
    @learnshare 你说的对,我也了解,但项目已经差不多了,想找个捷径处理。
    wincat
        20
    wincat  
    OP
       2015-01-30 13:26:08 +08:00
    @momou 这样页面就会莫名其妙的变宽了,左右拖动就发现有问题了。
    wincat
        21
    wincat  
    OP
       2015-01-30 13:27:23 +08:00
    @66beta 其他地方还是要用BS的,只是少数几个地方要这样处理。
    tension
        22
    tension  
       2015-01-30 13:29:38 +08:00
    给 <body class="action">

    当前的action 加上class 然后自己单独写

    比如 .home . container
    wincat
        23
    wincat  
    OP
       2015-01-30 13:30:37 +08:00
    @kisshere 试试看
    wincat
        24
    wincat  
    OP
       2015-01-30 13:34:04 +08:00
    @kisshere 没有用的
    muzuiget
        25
    muzuiget  
       2015-01-30 13:34:10 +08:00
    wincat
        26
    wincat  
    OP
       2015-01-30 13:35:51 +08:00
    @tension 大部分地方我还是要使用BS,而且我是用ajax做的单页面,所以这么改好像不是很妥。
    be1mont
        27
    be1mont  
       2015-01-30 13:40:03 +08:00
    style="padding:0;margin:0;"
    wincat
        28
    wincat  
    OP
       2015-01-30 13:42:31 +08:00
    @be1mont 木有用滴
    learnshare
        29
    learnshare  
       2015-01-30 13:44:48 +08:00
    @wincat 为了以后挖坑...
    wincat
        30
    wincat  
    OP
       2015-01-30 13:50:12 +08:00
    @muzuiget 没看懂,还是我用错了,没有效果。
    loading
        31
    loading  
       2015-01-30 13:54:43 +08:00
    似乎你是因为它的父级元素宽度限制?
    如果不改html,那么应该 position:absolute ,然后就更麻烦了。。。

    建议你还是改html
    loading
        32
    loading  
       2015-01-30 13:55:53 +08:00
    建议上个demo,方便大家改
    jarlyyn
        33
    jarlyyn  
       2015-01-30 13:58:13 +08:00
    前端页面无非3条路。
    html,css,js。
    你的需求理论上要改html最好。不然的话就用js直接操作dom呗……
    be1mont
        34
    be1mont  
       2015-01-30 13:59:23 +08:00
    @wincat 在container上 把 padding 和margin 弄成0
    wincat
        35
    wincat  
    OP
       2015-01-30 14:20:43 +08:00
    @jarlyyn html结构改掉应该是正道,但我现在在找css的歪门邪道,用JS的工作量就不如改HTML了。
    tension
        36
    tension  
       2015-01-30 14:25:51 +08:00
    还是上演示吧。。。 不然看图说话太累了,不知道你想实现的是什么效果
    jarlyyn
        37
    jarlyyn  
       2015-01-30 14:39:13 +08:00
    再看了下你的问题。你确定这个和父类或者继承有关吗?我怎么觉得你是父类有了padding,所以内部元素没法超框?这样的话用个负margin值就可以了。
    wincat
        38
    wincat  
    OP
       2015-01-30 14:45:46 +08:00
    @jarlyyn 不只是父类padding的问题吧,bs的container类width在不同浏览器宽度范围下是一个相对固定的值。要让包含在container里的div宽度永远等于浏览器宽度,我认为使用固定的负值margin是无法保证刚好相等的。
    jarlyyn
        39
    jarlyyn  
       2015-01-30 14:50:42 +08:00
    @wincat 你到底是要等于父类的宽,还是要等于屏幕的宽?这还是和继承没关系啊。是区域的结构或者划分的结构吧?
    如果只是自适应的话,去做相应宽度下的样式就好了么。
    wincat
        40
    wincat  
    OP
       2015-01-30 14:57:17 +08:00
    @jarlyyn 我是要等于屏幕的宽,而不是父类的宽。
    jankan
        41
    jankan  
       2015-01-30 15:10:57 +08:00
    #page-content {position:static}
    #headcontent {position:absolute;width:100%;height:xxxpx;}
    jarlyyn
        42
    jarlyyn  
       2015-01-30 15:24:34 +08:00
    @wincat 改html的吧,或者用jquery把你的子类在ready事件时移到body最后
    lincanbin
        43
    lincanbin  
       2015-01-30 15:27:13 +08:00
    用important覆盖样式,不要在html中插style属性,样式和HTML分离是良好习惯
    Aixtuz
        44
    Aixtuz  
       2015-01-30 16:23:09 +08:00
    “>”: 用他的爷爷级,把属性控制在父亲级,然后孙子级就不受影响了~
    eg:
    #name1 > div
    只有name1下的直属div 受该属性影像。 div里如果再有div是不继承的。
    shanelau
        45
    shanelau  
    PRO
       2015-01-30 17:20:38 +08:00
    !important; 覆盖掉所有的样式
    dallaslu
        46
    dallaslu  
       2015-01-30 22:22:52 +08:00
    /*
    如果 #page-content 内部布局简单,可以试试。
    */

    #page-content {
    width: 100%;
    }

    #page-content > * {
    margin-left: auto;
    margin-right: auto;
    padding-left: 15px;
    padding-right: 15px;
    }

    #head-content {
    width: 100%;
    }

    @media (min-width: 768px) {
    #page-content > * { width: 750px; }
    }

    @media (min-width: 992px) {
    #page-content > * { width: 970px; }
    }

    @media (min-width: 1200px) {
    #page-content > * { width: 1170px; }
    }
    dallaslu
        47
    dallaslu  
       2015-01-30 22:24:05 +08:00
    不好意思,@media 同学,@ 了你这么多遍!
    dallaslu
        48
    dallaslu  
       2015-01-30 22:39:18 +08:00
    @juicy 我觉得这并不属于继承的问题,盒模型的属性并不像字体风格一样来自父级,只能说是「适应」父级。
    strivek
        49
    strivek  
       2015-01-30 22:55:23 +08:00
    这是我简单写的demo
    http://codepen.io/nailu0/pen/gbxqoy/
    子元素想超过父元素宽度,最简单的方法是利用负margin值来实现
    设定一个很大的margin:0 -100%;内部可以继续用container居中,col,row来布局,也可以自己灵活处理。
    Agromania
        50
    Agromania  
       2015-01-30 23:04:33 +08:00
    楼主你的问题并不是继承了样式的问题,而是100%的base的问题。这个要么去掉上层所有的position:relative(可能破坏bs的布局),要么更改你的html结构,要么用js处理
    0x142857
        51
    0x142857  
       2015-01-30 23:11:25 +08:00 via Android
    @loading 用 id 写 css 是不推荐的做法
    baconrad
        52
    baconrad  
       2015-01-30 23:20:55 +08:00
    可以利用 calc & vw

    demo: http://codepen.io/anon/pen/PwKLwq
    loading
        53
    loading  
       2015-01-31 05:20:51 +08:00
    @0x142857 这个我知道的,感谢提醒。 ;-p
    MaqicXu
        54
    MaqicXu  
       2015-01-31 10:44:25 +08:00
    既然这样,你就不要用container装了嘛
    jarlyyn
        55
    jarlyyn  
       2015-01-31 10:49:55 +08:00 via Android
    @0x142857 为什么不推荐呢?如果的确不是类的语意,也不用id?
    Biwood
        56
    Biwood  
       2015-01-31 11:00:55 +08:00
    这个问题怎么还在讨论,晕,根据楼主描述,这根本不是CSS继承问题,也不是CSS优先级问题,很多人都搞错方向了,楼主说的明显是HTML结构问题。

    目前我想到两个办法来解决:
    第一个办法我在二楼已经说了,就是让这个div脱离文档流,就是用position:absolute或者position:fixed给div定位,这样div就可以相对于document来设置宽度了。

    第二个办法就是改变页面的HTML结构,你的要求是.container里面的div大于.container 本身,明显你这个结构写的不好,一般都是面积大的元素包含面积小的元素,你可以考虑改一下结构,比如让div在.container外面。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2683 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 14:51 PVG 22:51 LAX 07:51 JFK 10:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86