質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

解決済

2回答

4027閲覧

sassでバックスラッシュ(円マーク)が二つ出力されてしまう

muro

総合スコア99

CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

1クリップ

投稿2015/07/30 02:32

編集2015/07/30 02:43

gulpとsassを使って、olリストのアイコンを連番の丸数字にするcssを作成しようと考えています。
下記のようなリストです。

① 項目1 ② 項目2 ③ 項目3

これを実現するために以下のようなhtmlとgulpfileとsassを作成しました。
なお、sassからcssに変換するために使用しているプラグインは、gulp-sassです。

coffeescript

1# gulpfile.coffee 2gulp = require("gulp") 3plugins = require("gulp-load-plugins")() 4 5gulp.task "sass", -> 6 gulp.src("**.sass") 7 .pipe plugins.plumber 8 errorHandler: plugins.notify.onError("Error: <%= error.message %>") 9 .pipe plugins.sourcemaps.init() 10 .pipe plugins.sass 11 outputStyle: 'expanded' 12 .pipe plugins.autoprefixer() 13 .pipe plugins.sourcemaps.write "./" 14 .pipe gulp.dest("./") 15 16gulp.task "default", -> 17 gulp.watch "**/*.sass", ["sass"]

html

1<ol class="list"> 2 <li class="item">項目1</li> 3 <li class="item">項目2</li> 4 <li class="item">項目3</li> 5</ol>

scss

1//拡張子はscssではなくsassです。 2.list 3 list-style-type: none 4.item 5 @for $i from 1 through 3 6 $counter: 2459 + $i 7 &:nth-of-type(#{$i}) 8 &:before 9 content: "\0#{$counter}"

contentに直接丸数字を入れるのではなく、数値文字参照を入れている理由としては、liが増減したときに、forのカウントだけ変えれば済むようにしたかったためです。
\02460が①を表し、今回はliの数が3つなので数値文字参照は\02460~\02462、つまりブラウザ上では①~③が出力されるはずです。
(環境によってはバックスラッシュが円マークになりますが、以下バックスラッシュで呼びます)


しかし、実際にgulpを立ち上げ、sassを保存してcssに変換させると、下記の出力結果になりました。

css

1.list { 2 list-style-type: none; 3} 4 5.item:nth-of-type(1):before { 6 content: "\\02460"; 7} 8 9.item:nth-of-type(2):before { 10 content: "\\02461"; 11} 12 13.item:nth-of-type(3):before { 14 content: "\\02462"; 15}

それぞれバックスラッシュを一つしか入れていないのに、バックスラッシュが二つ出力されてしまいました。
また、いちおうブラウザで表示してみると、下記のような結果になり、望んでいたものとは異なります。

\02460 項目1 \02461 項目2 \02462 項目3

このままだと、sassを保存する度に、cssからバックスラッシュを一つ取り除く作業をしなければいけないので、非常に困ります。
どうしたらバックスラッシュを二つにすることなくcssを出力できるようになるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

バックスラッシュが二つ出力されてしまう問題は解決できずじまいですが、代替策を思いつきましたので、今回はこれで対応したいと思います。
引数を渡すと、それに応じた丸数字を返すという処理です。

scss

1// 拡張子は.scssではなく.sassです 2 3=circle_number($number) 4 @if $number == 1 5 content: "①" 6 @elseif $number == 2 7 content: "②" 8 @elseif $number == 3 9 content: "③" 10 11.list 12 list-style-type: none 13.item 14 @for $i from 1 through 3 15 &:nth-of-type(#{$i}) 16 &:before 17 +circle_number($i)

css

1/* 出力結果 */ 2.list { 3 list-style-type: none; 4} 5 6.item:nth-of-type(1):before { 7 content: "①"; 8} 9 10.item:nth-of-type(2):before { 11 content: "②"; 12} 13 14.item:nth-of-type(3):before { 15 content: "③"; 16}

余談ですが、今回の問題が発生した経緯について。

もともとはsassをcssに変換するのに、adobe bracketsのプラグインである、brackets-sassを使用していましが、sassの変換がエディタに依存することになるので、もしエディタを変えたくなったときにまずいと思い、gulp-sassに変更しました。
しかし、brackets-sassのときはバックスラッシュはそのまま一つで出力されたのに対し、gulp-sassに変えてからは二つ出力されるようになってしまい、今回の件となりました。

投稿2015/07/31 05:14

muro

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エスケープの問題ですので、「”」(ダブルクオート)を使わずに「’」(シングルクオート)で使用する事となります。
その代わり$counterが展開されなくなるので、それはシングルクオートから外して、文字列として連結させれば解決すると思います。

投稿2015/07/30 03:28

landy77

総合スコア1614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

muro

2015/07/31 05:03 編集

sassのコードを以下のように変更して、css変換を行ってみました。 (ここのコメントだと行頭のスペースが使えないので、代わりにアンダーバーで置き換えています) .item __@for $i from 1 through 9 ____$counter: 2459 + $i ____&:nth-of-type(#{$i}) ______&:before ________content: '\0' + $counter しかしcssの出力結果は、\0で表示されてほしいところが、�になってしまいました。 .item:nth-of-type(1):before { __content: "�2460"; } .item:nth-of-type(2):before { __content: "�2461"; } .item:nth-of-type(3):before { __content: "�2462"; }
muro

2015/07/31 04:08

まだ解決できていませんが、一つ気づいた点があったので、報告しておきます。 content: '\2460' このように変数ではなく直接入力にしてcss変換すると、丸数字に置き換わりました。 前回、�になった理由としては、\0で認識されてしまったと考えられます。 しかし、変数を#{ }で囲ってダブルクオート内に入れたときと、ダブルクオートの外に+で変数を連結させたときで、出力結果が異なるのが奇妙です…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問