Самый семантический способ сделать этот контейнер - PullRequest
5 голосов
/ 07 декабря 2010

Я хочу сделать следующую фигуру, используя div и радиус границы, с отступом к квадратным углам для старых браузеров.Нет изображений, пожалуйста.

У меня возникли некоторые проблемы с размещением нижнего угла рядом с заголовком ( выделено красной рамкой ).Я не хочу много ненужных div-ов, они должны быть максимально простыми и семантическими. альтернативный текст http://img715.imageshack.us/img715/4214/bradiuswut.gif

<div class="container">
   <div class="header">Title</div>
   <div class="body">Content</div>
</div>

.container{width: 660px; background: #fff;}
.container .header{float: left; width: 110px; background: #333; border-radius: 5px 5px 0 0;}
.container .body{clear: left; width: 660px; background: #333; border-radius: 0 0 5px 5px;}

Есть идеи?

РЕДАКТИРОВАТЬ 1:

Я сделал это так: http://jsfiddle.net/a93Rb/16/

<div class="container">
    <div class="header"></div>
    <div class="headerspacer">
       <div class="headercorner"></div>
    </div>
    <div class="body"></div>
</div>

.container{width: 660px; background: #fff;}
.container .header{float: left; width: 110px; height: 30px; background: #333; border-radius: 10px 10px 0 0;}  
.container .headerspacer{float: left; position: relative; width: 550px; height: 30px; background: #333;} 
    .container .headerspacer .headercorner{ position: absolute; width: 550px; height: 30px; background: #fff; border-radius: 0 0 0 10px;} 
.container .body{clear: left; width: 660px; height: 100px; background: #333; border-radius: 0 0 10px 10px;}

РЕДАКТИРОВАТЬ 2:

Я собираюсь использовать этот метод: http://jsfiddle.net/a93Rb/13/

Я также нашел метод использования изображения, которое не будетпоявляются, если браузер не поддерживает закругленные углы.Это намного более семантически, и весь смысл использования border-radius состоит в том, чтобы отрицать ненужную разметку.Я думаю, что на самом деле я буду использовать этот метод, но я не приму его в качестве ответа, поскольку я заявил, что не хочу изображений.

<div class="container">
    <div class="header"></div>
    <div class="body"></div>
</div> 

.container{width: 660px; background: #fff;}
.container .header{float: left; width: 110px; height: 30px; background: #333; border-radius: 10px 10px 0 0;}                                  
.container .header:after{content: url(http://img24.imageshack.us/img24/1112/corner0.gif); display: block; margin: 20px 0 0 110px;}
.container .body{clear: left; width: 660px; height: 100px; background: #333; border-radius: 0 0 10px 10px;}

Ответы [ 9 ]

4 голосов
/ 07 декабря 2010

Как и предлагалось ранее, темный div с белым div внутри и границей в левом нижнем углу. Пример здесь .

Код грубый и должен быть переписан, но он работает. И вы должны синхронизировать цвет фона div с цветом страницы.

4 голосов
/ 07 декабря 2010

Вот ваше чистое решение CSS http://jsfiddle.net/Starx/a93Rb/,, пока совместимое только с FF. Вы можете сделать его совместимым для остальных браузеров.

3 голосов
/ 08 декабря 2010

Я опаздываю на вечеринку, но мне нравится вызов, и вот мое решение:

demo

http://jsfiddle.net/mtTLu/

Особенности:

  1. Без дополнительной разметки
  2. Откат к прямым углам
  3. Нет изображений
  4. Готов к работе с Webkit и Firefox.

Тем не менее, это ужасный код CSS.Если бы я когда-нибудь столкнулся с кем-то, кто сделал это, чтобы избежать одного деления несемантического кода, я бы ударил его по лицу.

Но, я думаю, это соответствует вашим ограничениям.

2 голосов
/ 07 декабря 2010

Моя идея заключалась в белом округленном div с темным фоном под левым нижним углом (Я не могу заставить его работать, поэтому было бы здорово увидеть результат :))

1 голос
/ 07 декабря 2010

Ваш вопрос был "самым семантическим способом". Нет ничего семантического в контейнерах / макетах div контейнера. Семантическая сеть означает помощь другим в понимании различного контента, например, таблица должна быть таблицей, список должен быть списком и т. Д.

В этой заметке вы не правильно разметили элементы, будьте осторожны с использованием тегов div вместо их истинного значения.

<div class="whatever_label">
   <h2>Title</h2> <!-- or lower level heading: h3,h4 etc. -->
   <span></span>
   <p>Content</p>
</div>

/* Container of module */
.whatever_label{
}
/* Heading Tab */
.whatever_label h2{
}
/* Radius: Heading Tab */
.whatever_label span{
}
/* Content */
.whatever_label p{
}

Хороший совет для определения того, использует ли html-документ хорошую семантику, - отключите CSS-стилизацию в своем браузере, и, если она все еще логична, она будет иметь смысл.

Правка, кажется, это самый чистый способ, который я мог бы придумать, надеюсь, он поможет:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Box Demo</title>
<style type="text/css">

/* :: Reset default browser stylings.
-------------------------------------------------------------------------------------------------------------------- */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, cite, dfn, ins, kbd, q, code, samp, del, em, var, strong, pre,/* sub, sup,*/
a, abbr, acronym, address, big, font, img, s, 
small, strike, tt, 
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {margin: 0; padding: 0; border: 0; outline: 0; font-weight: normal; font-style: normal; font-size: 100%; vertical-align: baseline;}
body {color: black; background: white;}
ol, ul {list-style: none;}
table{border-collapse: collapse;}

/* Container of module */
.box{
  width:600px;
}
/* Heading Tab */
.box h2{
  float:left;
  font-size:1.0em;
  color:white;
  background: #333;
  height:10px;
  padding:15px 20px 25px 20px;
  margin:0;
  -moz-border-radius: 10px 10px 0 0;
  border-radius: 10px 10px 0 0;
}
.box div.radius{
  background: #333;
  float: left;
  height: 25px;
  margin: 25px 0px 0px 0px;
  width: 20px;
}
/* Radius: Heading Tab */
.box span{
  background-color: white;
  -moz-border-radius:0 0 0 10px;
  border-radius: 0 0 0 10px;
  float: left;
  height: 25px;
  margin: 0;
  width: 20px;
}
/* Content */
.box p{
  display:block;
  clear:both;
  color:white;
  background: #333;
  width:560px;
  padding:20px;
  margin:0;
}

</style>

</head>
<body style="margin:20px;">
<div class="box">
   <h2>Whatever title</h2> <!-- or lower level heading: h3,h4 etc. -->
   <div class="radius"><span></span></div>
   <p>Nullam fermentum nibh eget lectus cursus elementum. Vestibulum congue elementum erat, 
    at adipiscing libero blandit sed. Aliquam erat volutpat. Duis feugiat blandit sagittis. 
    Praesent interdum fringilla rutrum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    Nunc dui nulla, sodales et posuere nec, varius quis nisl. Cras mauris ipsum, commodo sit amet 
    sollicitudin ut, rutrum eget erat. Nullam aliquam, massa et sagittis suscipit, massa erat 
    adipiscing turpis, et luctus metus velit quis ante. Maecenas elementum tristique euismod. 
    Phasellus iaculis arcu eget libero tempor accumsan. Vestibulum at turpis ac dui venenatis condimentum.
    Duis tristique neque at nisi feugiat ac congue nibh luctus. Proin non elit et sapien feugiat dictum nec at diam.
    Quisque quis feugiat velit. Mauris id tortor id ligula vulputate dictum ac vitae elit. 
    Maecenas congue tincidunt leo, ut lobortis mi tempor sit amet. Vestibulum condimentum euismod neque. 
    Vivamus ullamcorper odio ut lacus ullamcorper id pellentesque orci euismod. Ut vitae arcu nulla.
    </p>
</div>
</body>
</html>
1 голос
/ 07 декабря 2010

Я также нашел способ использования изображения, которое не будет отображаться, если браузер не поддерживает закругленные углы. Это намного более семантически, и весь смысл использования border-radius состоит в том, чтобы отрицать ненужную разметку. Я думаю, что на самом деле я буду использовать этот метод, но я не приму его в качестве ответа, поскольку я заявил, что не хочу изображений. Но вот оно: http://jsfiddle.net/a93Rb/13/

<div class="container">
    <div class="header"></div>
    <div class="body"></div>
</div> 

.container{width: 660px; background: #fff;}
.container .header{float: left; width: 110px; height: 30px; background: #333; border-radius: 10px 10px 0 0;}                                  
.container .header:after{content: url(http://img24.imageshack.us/img24/1112/corner0.gif); display: block; margin: 20px 0 0 110px;}
.container .body{clear: left; width: 660px; height: 100px; background: #333; border-radius: 0 0 10px 10px;}
1 голос
/ 07 декабря 2010

Вот мое решение.

Я уверен, что это не самое лучшее, но я сделал это для склонности. Я думал, что это может кому-то помочь!

"Окончательный" результатэто:

alt text

Вы можете видеть, как это работает здесь .

Код выглядит так:

HTML

<div id="big">

</div>
<div id="other">

</div>
<div id="small">

</div>


<div id="cont">

</div>

CSS

#big{
    background-color:#aaa;
    float:left;
    border: 1px solid red;    
    -webkit-border-top-left-radius: 15px;
    -webkit-border-top-right-radius: 15px;
    -moz-border-radius-topleft: 15px;
    -moz-border-radius-topright: 15px;
    border-top-left-radius: 15px;
    border-top-right-radius: 15px;
    height: 50px;
    width: 100px;
}

#cont{
    background-color:#aaa;
    float:bottom;
    margin-top:51px;
    border: 1px solid red;    
    -webkit-border-bottom-right-radius: 15px;
    -webkit-border-bottom-left-radius: 15px;
    -moz-border-radius-bottomright: 15px;
    -moz-border-radius-bottomleft: 15px;
    border-bottom-right-radius: 15px;
    border-bottom-left-radius: 15px;
    height: 250px;
    width: 300px;
}

#small{
    float:left;
    margin:25px 0 0 -27px;
    border: 1px solid red;    
    -webkit-border-bottom-left-radius: 15px;
    -moz-border-radius-bottomleft: 15px;
    border-bottom-left-radius: 15px;
    height: 25px;
    width: 25px;
    background-color:#fff;
}

#other{
    z-index:-1;
    float:left;
    margin:25px 0 0 -1px;
    border: 1px solid red;
    height: 25px;
    width: 25px;
    background-color:#aaa;
}

Надеюсь, это поможет, удачи!

0 голосов
/ 13 декабря 2010

Пит был лучшим ответом, он был прав, другие решения вовсе не "семантические". Это важное отличие и от того, как вы задали вопрос, действительно самый важный элемент. Семантический не означает «простой», это означает, что правильные теги должны использоваться для наиболее точного представления того, что они содержат или описывают, но не прибегая к визуальному описанию, поскольку это полностью изменчиво. То же самое для классов и идентификаторов. Тег div, хотя и полезен, но, вероятно, является одним из наименее семантических тегов, и его следует использовать с осторожностью.

0 голосов
/ 07 декабря 2010

Вам также следует рассмотреть возможность использования элемента dl.

Этот HTML:

<dl>
    <dt>..</dt>
    <dd>..</dd>
</dl> 

будет иметь более чистую семантику, чем вложенные div, но, вероятно, будет более неловко только с одним блоком title-content.

Наконец, h(1-6) элементы будут иметь больше семантики, чем div class="header"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...