About

This page contains a single entry from the blog posted on November 25, 2007 1:04 PM.

The previous post in this blog was Rails Helper v0.2.

The next post in this blog is wvk-4, consolvix+trac+svn.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31

« Rails Helper v0.2 | Main | wvk-4, consolvix+trac+svn »

Abgerundete Ecken

So, nach einer ereignisreichen Woche bin ich nun zurückgekehrt und kann endlich wieder einmal mit etwas Inhalt an dieser Stelle dienen. Es gibt momentan wenig Großartiges zu berichten, darum stelle ich einfach mal eine kleiner helper-Funktion vor, die mir schon seit langem das Leben mit Web 2.0 leichter macht. Nein, es handelt sich dabei nicht um "fancy Ajax"-Funktionalität, sondern um etwas anderes was mit dem W2.0-Hype exponentiell zuzunmehmen scheint: abgerundete Ecken bei "Boxen". Es gibt jede Menge Möglichkeiten, so etwas umzusetzen. Ich hab mich für die folgende Methode entschieden.

Als erstes benötigt man eine Hintergrundgrafik, die folgendermaßen zerschnitten wird:

text3159.png

Dabei ist zu beachten, dass der Hintergrund bei den abgerundeten ecken nicht transparent ist, sondern dem Seitenhintergrund entspricht -- Da sich die Bilder nachher überlappen, würde der ganze Effekt sonst verloren gehen.

Als nächstes definiere man sich für jedes DIV, das mit den runden Kanten versehen werden soll, ein solches Konstrukt:

<div class="rro">
  <div class="rru">
    <div class="rlo">
      <div class="rlu">
        <div class="rounded_content">
          Hier kommt der Inhalt rein!
        </div>
      </div>
    </div>
  </div>
</div>

Das Stylesteet ergänze man um folgende Zeilen:

.rro {
    display: block;
    max-width: 580px;
    background:url("/images/roundedbox_ro.png") top right no-repeat;
    margin:  .2em;
    padding: 0;
}

.rlo {
    background:url("/images/roundedbox_lo.png") top left no-repeat;
    margin:  0;
    padding: 0;
}

.rru {
    background:url("/images/roundedbox_ru.png") bottom right no-repeat;
    margin:  0;
    padding: 0;
}

.rlu {
    background:url("/images/roundedbox_lu.png") bottom left no-repeat;
    margin:  0;
    padding: 0;
}

.rounded_content {
    padding: .4em .4em;
}

Da es aber unheimlich umständlich ist, jedes Mal diese Batterie an DIVs hinzuschriben, habe ich folgende funktion in ApplicationHelper definiert:

module ApplicationHelper
  def rounded_corners(id = nil, &block)
    content = capture(&block)
    concat(content_tag_string(:div,
      content_tag_string(:div,
        content_tag_string(:div,
          content_tag_string(:div,
            content_tag_string(:div, content, :class => 'rounded_content'),
            :class => 'rlu'),
          :class => 'rlo'),
        :class => 'rru'),
      :class => 'rro', :id => id),
    block.binding)
  end
end

Will man nun in einer View eine Box mit abgerundeten Ecken darstellen, geht das ganz einfach so:

<% rounded_corners 'mein_abgerundetes_dingsda' do %>
  Hier kommt der Inhalt rein!
<% end %>

Und der Rest wird von Ruby gemacht. Ist das nicht hübsch? :)

TrackBack

TrackBack URL for this entry:
http://www.innoq.com/movabletype/mt-tb.cgi/2909

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)