V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Can I use?
http://caniuse.com/
Less
http://lesscss.org
Cool Libraries
Bootstrap from Twitter
Jetstrap
wincat
V2EX  ›  CSS

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

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

    有一个页面使用了 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  
       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   ·   实用小工具   ·   961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 22:26 · PVG 06:26 · LAX 14:26 · JFK 17:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.